繁体   English   中英

Python中的Levenshtein距离-国家字符错误的结果

[英]Levenshtein distance in Python - wrong result with national characters

我发现了类似的主题: 变音符号上的Levenshtein距离 ,但这是PHP,我用Python编写。 但是,问题仍然相同。 例如:levenshtein(kot,kod)= 1 levenshtein(się,sie)= 2,这是错误的。 关于如何解决这个问题的任何想法?

首先,您必须确保字符串都使用unicode。 对于Python 3,您将自动具有该功能,但是在Python 2中,您必须首先将字符串解码为unicode类型。 例如,如果您知道控制台中的编码为UTF-8,则为sys.argv[1].decode('utf-8') 您可以尝试使用sys.stdin.encoding猜测这种编码。

之后,您可能必须规范化unicode。 例如,unicode字符串u'\Ç'u'\C\̧'具有相同的表示形式Ç,但是它们将被比较为不相等,并且将具有非零的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问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM