2024-04-29 11:34:27 发布
网友
我发现了类似的主题:Levenshtein distance on diacritic characters,但它是PHP,我用Python编写的。不过,问题依然存在。例如: levenshtein(kot,kod)=1 levenshtein(się,sie)=2,这是错误的。 有什么办法解决这个问题吗?在
首先,必须确保两个字符串都是unicode格式。对于python3,您可以自动获得它,但是在python2中,您必须首先将字符串解码为unicode类型。例如,sys.argv[1].decode('utf-8'),如果您知道控制台中的编码是UTF-8。您可以尝试用^{}来猜测此编码。在
unicode
sys.argv[1].decode('utf-8')
之后,您可能需要规范化unicode。例如,unicode字符串u'\u00c7'和u'\u0043\u0327'具有相同的表示形式,但是它们将被比较为不相等,并且具有非零的levenshtein距离。要规范化字符串,可以使用unicodedata.normalize函数。在
u'\u00c7'
u'\u0043\u0327'
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。在
首先,必须确保两个字符串都是unicode格式。对于python3,您可以自动获得它,但是在python2中,您必须首先将字符串解码为} 来猜测此编码。在
unicode
类型。例如,sys.argv[1].decode('utf-8')
,如果您知道控制台中的编码是UTF-8。您可以尝试用^{之后,您可能需要规范化unicode。例如,unicode字符串
u'\u00c7'
和u'\u0043\u0327'
具有相同的表示形式,但是它们将被比较为不相等,并且具有非零的levenshtein距离。要规范化字符串,可以使用unicodedata.normalize
函数。在Python 2中的脚本可能如下所示:
毕竟,如果字符在Basic Multilingual Plane之外,您仍可能遇到问题。在这个问题上,看看这个stackoverlow question。在
相关问题 更多 >
编程相关推荐