我正在寻找一种支持模糊字符串匹配的算法,例如 Damerau–Levenshtein 或 DICE 或最长公共子序列。但是该算法应该能够匹配不同语言中的单词,并在用各自语言拼写时认为它们相等,如果在各自语言中拼写错误则认为它们接近。
我认为一个例子可以更好地解释我的意思(1,2,5,6形成一个与3,4,7,8相同的组):
A well spelled cmpny name A well spelled term we can find in multiple languages
_____________ ___________________________________________________
1 StackOverflow Question // would easily match with 2
2 StackOverflow Frage // would easily match with 1
3 Swiss Life Pension Fund // would easily match with 4
4 Swiss Life Caisse de pension // would easily match with 3
另外,即使拼写错误,我也希望它们能够轻松匹配:
A misspelled company name A misspelled term we can find in multiple languages
_________________________ ____________________________________________________
5 stackverflow qestion // would match easily with 1,2,6
6 SteckOverflw frge // would match easily with 1,2,5
7 Swisslife pension // would match easily with 3,4,8
8 swizerland life caisse pension // would match easily with 3,4,7
比赛我的意思是有一个好成绩。而且我实际上已经尝试使用 Dice 和 lcs 来实现这种比较,但问题是它对用多种语言拼写的单词非常弱。
在一个棘手的情况下看 Dice coef :
name 1 name 2 coef
____________________ ______________________ _______________
migros pensionskasse sig pensionskasse 0.769230769
migros pensionskasse caisse pensions migros 0.727272727
上面的第一个更好,只是因为pensionskasse
匹配并且大于migros
or sig
。但是因为pensionskasse
意味着caisse de pension
第二个在我寻求的算法中应该更好。
我知道可以用各种语言拼写的可能单词,因此我可以制作一本字典,其中包含这些单词之间的联系。
我也可以摆脱它们(多语言单词),但随后我会丢失一些有见地的信息来建立基于这些联系的小组。
有没有人见过这样的实现?理想情况下在 C# 中?