14

私は現在、バンドと会場のデータベースを多数の外部サービスと照合する必要があるプロジェクトに取り組んでいます。

基本的に、2 つの名前が同じかどうかを判断するための最良の方法について、方向性を探しています。例えば:

  • 私たちのデータベースの会場名 - 「The Pig and Whistle」
  • サービス 1 - 「ピッグ アンド ホイッスル」
  • サービス 2 - 「豚と笛」
  • などなど

主な違いは、"the" の欠落や "and" の代わりに "&" を使用することだと思いますが、綴りや単語の順序が少し異なることもあると思います。

この状況で一般的に使用されるアルゴリズム/手法は何ですか?ノイズ ワードをフィルター処理する必要がありますか?

C# で似たような例を見たことがありますか?

更新: 誰かが ac# の例に興味がある場合は、レーベンシュタイン距離の Google コード検索を実行してアクセスできるヒープがあります。

4

4 に答える 4

14

これを行う標準的な (そしておそらく最も簡単な) 方法は、2 つの文字列間のレーベンシュタイン距離を測定することです。文字列のサイズに対して距離が小さい場合は、おそらく同じ文字列です。多数の非常に小さな文字列を比較する必要がある場合、それらが同じかどうかを判断するのが難しくなることに注意してください。より長い文字列でより効果的です。

より賢明なアプローチは、2 つの文字列間のレーベンシュタイン距離を比較することですが、"and"/"&"、"Snoop Doggy Dogg"/"Snoop" などのより明白な変換には距離 0 を割り当てることです。

于 2009-12-17T01:03:56.703 に答える
1

アーティストのエイリアスも追跡する Discogs データベース (パブリック ドメイン) を使用しました。

次のいずれかを実行できます。

  • API 呼び出し(namevariationsフィールド)を使用します。
  • 毎月のデータ ダンプ( ) をダウンロードし*_artists.xml.gzて、データベースにインポートします。これには同じデータが含まれていますが、明らかにはるかに高速です。

レーベンシュタイン距離)ソリューションに対するこの利点の 1 つは、誤った一致がはるかに少なくなることです。
たとえばRyan AdamsBryan Adamsスコアが で2、これは非常に優れています (低いほど一致度が高くPig and WhistlePig & Whistleスコアは です3)。しかし、彼らは明らかに別人です。

よりスマートなアルゴリズムを作成することもできますが (たとえば、文字列の長さも調べます)、エイリアス DB を使用する方がはるかに簡単で、エラー電話も少なくなります。これを実装した後、他の回答で提案されたソリューションを完全に削除して、より良い一致を得ることができました。

于 2014-08-11T10:51:01.410 に答える
0

soundexも役に立つかもしれません

于 2009-12-17T01:19:24.970 に答える
0

バイオインフォマティクスでは、これを使用して常に DNA またはタンパク質配列を比較しています。

アルゴリズムはたくさんありますが、おそらくグローバル アラインメントを見たいと思うでしょう。

この点で、Needleman-Wunsch アルゴリズムはおそらくあなたが求めているものです。

比較する文字列が特に長く繰り返される場合は、BLAST などのヒューリスティック検索を検討することもできます。

于 2009-12-17T01:49:19.033 に答える