15

2 つの文字列をスマートに比較できるライブラリ/クラスを探しています。せいぜい、結果として 2 つの文字列がどのように似ているかの割合を示します。異なるリポジトリに記録されている会社名、住所を比較しているため、多くのスペルミスや名前の不一致があります。

比較するサンプル文字列:

 "Good Company Ltd." vs. "GoodCompany" 
 "Baker Street 2" vs. "Baker Str. 2" 

類似度のパーセンテージで結果が得られた場合、これはそのようなデータのスマート マージの入力になります。

このようなスマートな文字列比較を可能にする優れたライブラリを知っていますか?

4

3 に答える 3

14

レーベンシュタイン距離の実装を探すことをお勧めします。2 つの文字列を等しくするには、何文字の挿入/削除と置換が必要かを示します。

これは、レーベンシュタイン距離およびその他のテキスト比較アルゴリズムを実装する C# のライブラリに関する投稿です:テキスト アルゴリズム用の .NET ライブラリ? .

ただし、レーベンシュタインを使用すると「Good Company Ltd.」と表示されるため、いくつかの方法を組み合わせて使用​​する必要があると思います。「Bad Company Ltd.」に似ています。「GoodCompany」よりも。

'str' を展開して前処理を行う必要があるかもしれません。'street' に変更し、'Ltd.' を削除します。文字列比較に関して「無意味な」単語として。

更新 1

Francesco De Lisiは、音声アルゴリズムの使用を提案しています。スペルミスのある名前を比較するのにより適しているようです。それでも、住所を表音部分と非表音部分 (建物番号など) に分割し、別々に比較する必要があります。

更新 2

住所の比較については、この投稿でGoogle Maps API を使用することを提案し、別の投稿で住所の解析について説明しています。Google は、番地のデータベースを持っているので、番地名の最も正確なスペルを見つけることができるため、信頼できる結果が得られると思います。正しい通り/会社名のリストがないと、間違った奇妙な名前に遭遇するかもしれませんが、多くの異なる正しい名前はそれに似ています.

于 2013-05-23T11:59:13.467 に答える