Java 非英语字符串上的Levenshtein距离

Java 非英语字符串上的Levenshtein距离,java,levenshtein-distance,fuzzy-search,Java,Levenshtein Distance,Fuzzy Search,该算法是否也适用于非英语字符串 更新:在类似Java的语言中,当比较亚洲字符时,这会自动工作吗?是。但您必须将非英语字符视为“1个字符”,而不是多个字符(例如utf-8)。 例如,在python中,您可以使用unicode类来表示字符串(和字符)。Levenshtein不关心语言,它只告诉您需要更改(添加、删除、交换)多少字符才能从一个字符串转换到另一个字符串 所以:是的,但你必须检查你的字符集,一些外来的“单个”字符将被视为两个(或更多)字符。仅当语言是基于字母的。例如俄语、德语,。。。但象形

该算法是否也适用于非英语字符串


更新:在类似Java的语言中,当比较亚洲字符时,这会自动工作吗?

是。但您必须将非英语字符视为“1个字符”,而不是多个字符(例如utf-8)。
例如,在python中,您可以使用unicode类来表示字符串(和字符)。

Levenshtein不关心语言,它只告诉您需要更改(添加、删除、交换)多少字符才能从一个字符串转换到另一个字符串


所以:是的,但你必须检查你的字符集,一些外来的“单个”字符将被视为两个(或更多)字符。

仅当语言是基于字母的。例如俄语、德语,。。。但象形文字(比如中国)或音节(比如老挝)则不然

更新问题:如果我的编程语言支持unicode字符串怎么办?@Ryan Fernandes,那么您使用矩阵65536 x代替矩阵256 x 25665536@John你们能打开上面问题的维基链接吗。无需使用矩阵实现算法,但从数学角度来看,Levenshtein距离定义在可用字母的矩阵上。所以事实上,我的意思不是256个字母,而是预期语言中的字母数。unicode的情况也一样-您不需要声明65536个条目,只需声明已用字母的子集。@Dewfy:“从数学角度来看……是在可用字母矩阵中定义的”????。我从未见过字母表的大小(“预期语言中的字母数”),这是完全不相关的,在维基百科的文章中肯定没有这样的参考。在实现中,您不需要声明“已用字母的子集”。事实上,在Python这样的语言中,您可以编写一个Levenshtein函数,该函数将处理任何可以进行相等比较的对象序列。顺便说一句,Unicode有65536个以上的代码点。@John Machin-完全同意你的看法。Lucene很好地实现了您所说的内容。关于unicode-是的,我知道,再一次-你是绝对正确的。有时很容易做出粗略的假设,而不是用很多词来描述精确的东西。更新的问题:如果我的编程语言支持unicode字符串怎么办?它能与RGB直方图一起工作吗?为什么不呢?