Damerau–Levenshtein、DICE、Longest Common Subsequence などのファジー文字列マッチングをサポートするアルゴリズムを探しています。ただし、このアルゴリズムには、異なる言語の単語を照合し、それぞれの言語で綴られている場合は等しいと見なし、それぞれの言語で綴りが間違っている場合は閉じる機能が必要です。
例は私が意味することをよりよく説明すると思います(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 を使用してこの種の比較を達成しようとしましたが、問題は、複数の言語で綴られた単語に対して非常に弱いことです。
トリッキーなケースでダイス係数を見てください:
name 1 name 2 coef
____________________ ______________________ _______________
migros pensionskasse sig pensionskasse 0.769230769
migros pensionskasse caisse pensions migros 0.727272727
が一致し、またはpensionskasse
よりも大きいという理由だけで、上記の最初のほうが優れています。しかし、私が求めるアルゴリズムでは2番目の方が優れているはずだからです。migros
sig
pensionskasse
caisse de pension
さまざまな言語でつづりができる可能性のある単語を知っているので、それらの単語間の関係を辞書にまとめることができます。
それら (多言語の単語) を取り除くこともできますが、それらのつながりに基づいてグループを構築するための洞察に満ちた情報を失うことになります。
このような実装を見た人はいますか? 理想的にはC#で?