我已经使用trie树实现了Levenshtein距离算法,如Steve Hanov所述。 但是,我在处理特殊字符时遇到了困难。 例如,如果我计算Großmann和Grossmann之间的距离,我需要距离为零,因为ß和ss应该被认为是相等的。
支持这些特殊情况的最佳解决方案(如果有的话)是什么。
我最初的想法是在计算距离之前对所有字符串进行标准化。 所以在Großmann - > Grossman,österreich - > oesterreich,...... 但是,.NET中似乎没有这样的功能?
答案 0 :(得分:1)
挑战在于当前的文化并不能识别单个词的语言。
假设你愿意在比赛方面犯错误。
识别一组永远不需要映射的字符。
确定所有文化的集合映射。
确定特定文化的映射。
首先进行未映射的Levenshtein距离。
如果未映射的距离为零,则停止。
如果未映射的距离大于x(例如4),则停止,因为它不匹配。
如果单词只包含永远不需要映射的字符(例如a-z),则停止。
将两者都映射到所有文化,如果距离为零则停止。
映射到默认文化,如果距离为零,则停止。
映射到其他文化,如果距离为零,则停止。
我添加了一个直的字符串。比较Levenshtein报告0如果是真的。
答案 1 :(得分:0)
我认为规范化是可行的方法。
我不知道有任何现成的库,快速搜索没有发现任何东西。
此处讨论了类似的问题:Converting "Bizarre" Chars in String to Roman Chars。
他们的解决方案,手动创建映射将起作用,只要您可以提前全面识别所有必要的映射。