3

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

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

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

4

2 回答 2

1

挑战在于当前的文化无法识别单个单词的语言。

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

确定一组永远不需要映射的字符。

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

确定特定文化的映射。

首先做一个未映射的 Levenshtein 距离。

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

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

如果单词只有不需要映射的字符(例如 az),则停止。

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

映射到默认区域性,如果距离为零,则停止。

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

我在 Levenshtein 中添加了一个直接的 string.compare,如果为真,则报告 0。

于 2012-05-23T14:32:50.363 回答
0

我认为规范化是要走的路。

我不知道有任何现成的图书馆可以做到这一点,快速搜索也没有发现任何东西。

这里讨论了一个类似的问题:Converting "Bizarre" Chars in String to Roman Chars

他们的解决方案是手动创建映射,只要您能提前全面识别所有必要的映射即可。

于 2012-05-23T13:10:02.583 回答