Levenshtein距离和特殊人物

时间:2012-05-23 13:04:54

标签: .net unicode levenshtein-distance unicode-normalization ligature

我已经使用trie树实现了Levenshtein距离算法,如Steve Hanov所述。 但是,我在处理特殊字符时遇到了困难。 例如,如果我计算Großmann和Grossmann之间的距离,我需要距离为零,因为ß和ss应该被认为是相等的。

支持这些特殊情况的最佳解决方案(如果有的话)是什么。

我最初的想法是在计算距离之前对所有字符串进行标准化。 所以在Großmann - > Grossman,österreich - > oesterreich,...... 但是,.NET中似乎没有这样的功能?

2 个答案:

答案 0 :(得分:1)

挑战在于当前的文化并不能识别单个词的语言。

假设你愿意在比赛方面犯错误。

识别一组永远不需要映射的字符。

确定所有文化的集合映射。

确定特定文化的映射。

首先进行未映射的Levenshtein距离。

如果未映射的距离为零,则停止。

如果未映射的距离大于x(例如4),则停止,因为它不匹配。

如果单词只包含永远不需要映射的字符(例如a-z),则停止。

将两者都映射到所有文化,如果距离为零则停止。

映射到默认文化,如果距离为零,则停止。

映射到其他文化,如果距离为零,则停止。

我添加了一个直的字符串。比较Levenshtein报告0如果是真的。

答案 1 :(得分:0)

我认为规范化是可行的方法。

我不知道有任何现成的库,快速搜索没有发现任何东西。

此处讨论了类似的问题:Converting "Bizarre" Chars in String to Roman Chars

他们的解决方案,手动创建映射将起作用,只要您可以提前全面识别所有必要的映射。