Python中的Levenshtein距离与民族字符错误结果

2024-04-29 11:34:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现了类似的主题:Levenshtein distance on diacritic characters,但它是PHP,我用Python编写的。不过,问题依然存在。例如: levenshtein(kot,kod)=1 levenshtein(się,sie)=2,这是错误的。 有什么办法解决这个问题吗?在


Tags: 主题on错误levenshteindistancephpcharacters办法
1条回答
网友
1楼 · 发布于 2024-04-29 11:34:27

首先,必须确保两个字符串都是unicode格式。对于python3,您可以自动获得它,但是在python2中,您必须首先将字符串解码为unicode类型。例如,sys.argv[1].decode('utf-8'),如果您知道控制台中的编码是UTF-8。您可以尝试用^{}来猜测此编码。在

之后,您可能需要规范化unicode。例如,unicode字符串u'\u00c7'u'\u0043\u0327'具有相同的表示形式,但是它们将被比较为不相等,并且具有非零的levenshtein距离。要规范化字符串,可以使用unicodedata.normalize函数。在

Python 2中的脚本可能如下所示:

import unicodedata
import sys
# import or define your levenshtein function here

def decode_and_normalize(s):
    return unicodedata.normalize('NFKC', s.decode('utf-8'))

s1 = decode_and_normalize(sys.argv[1])
s2 = decode_and_normalize(sys.argv[2])
print levenshtein(s1, s2)

毕竟,如果字符在Basic Multilingual Plane之外,您仍可能遇到问题。在这个问题上,看看这个stackoverlow question。在

相关问题 更多 >