2

私はショッピング比較サイトを開発していますが、プロジェクトは非常に進んだ段階にあります。さまざまなアフィリエイトネットワークからのマーチャントフィードを使用して、毎日5,000万の製品にインデックスを付けています。パフォーマンスのボトルネックの大部分を含め、私が抱えていた問題のほとんどはすでに解決されています。

私の問題は何ですか:まず、drupalでapache solrを使用していますが、この問題はdrupalまたはsolrに固有のものではありません。知識がなくても、問題ありません。

私たちは2000以上の異なる商人から製品フィードを受け取ります、そしてそれらのフィードは混乱しています。それらには特定のパターンはなく、各マーチャントは希望する方法でフィードを送信します。これに関してはすでに多くの問題を解決しましたが、1つ残っています。ファセットブラウジング機能の分類用語を正規化します。

Webサイトに「NarrowbyBrands」ブラウジングファセットがあるとします。ここで、100のマーチャントがMicrosoftの製品を提供するとします。ここで問題が発生します。データフィード「Microsoft」の「ブランド」列に入力するマーチャント、「Microsoft、Inc。」、「Microsoft Corporation」、「Products from Microsoft」など、マーチャントと最悪の間に特定のパターンはありません。 、一部の個々の商人は非常にずさんなので、同じデータフィードで同じブランドに対して異なる文字列を持っています。

これらの異なるブランドすべてがナビゲーションに表示されることは望ましくありません。インポートしたブランドを「good」ブランドテーブル(「MicrosoftCorporation」->「Microsoft」、「Products fromMicrosoft」->「Microsoft」など)に手動でマッピングするという問題に対する手動の解決策があります。データベースには10,000のブランドのようなものがあり、これは実行可能です。問題は、「作者」のような大きなものが付属している場合です。書籍をシステムにインポートすると、80万人を超える著者がいて、同じ問題が発生します。これは、手動マッピングでは実行できません。問題は同じです:「トム・マイク・アポストル」、「トム・M・アポストル」、「アポストル、トム・M」など。

許容できる精度(85%-95%の精度)でこの問題を自動的に解決する良い方法を知っている人はいますか?

助けてくれてありがとう!

4

1 に答える 1

0

私の頭に浮かぶいくつかのアイデアは、それはただの緩い考えですが:

  1. 名前をイニシャルに変換します(例ではTMA)。'-'をスペースとして扱うので、fe。アントワーヌドサンテグジュペリはADSEになります。ここでの問題は、「、」の扱い方ですが、一般的な使用法は、名前の前に名前を付けることです。したがって、位置を入れ替えるだけで機能するはずです(したがって、A、TMはTM、Aになり、コンマを削除します-TMA)。
  2. それらのイニシャルでデータベース内の作成者をフィルタリングします
  3. 各イニシャルについて、名前全体(Tom、Apostol)がある場合は一致するかどうかを確認し、一致しない場合は(M.)自動的に一致すると見なします。
  4. ある程度の許容範囲が必要な場合は、名前をレーベンシュタイン距離と比較して、いくつかの違いを許容できます(ここではOracleの実装があります)
  5. 一致する名前は同じ著者として扱い、名前全体を見つけるには、イニシャル(T、M、A)ごとに、フィルター処理された著者を検索し(ステップ2の後)、イニシャル(M.)だけでなく1つを見つけようとします。完全な名前(マイク)で、見つからない場合は、イニシャルを使用します。したがって、指定した各例は同じ値に変換され、フルネームになります(Tom MikeApostol)。

検討する価値のあること:
名前の同義語のマッピングを含める(Thomas <-> Tomのように、最大​​で数百のレコードになる可能性が高い)
この方法は、有効なイニシャル(Nの代わりにMがないなど)を持つために重要です。

編集:私はしばらく前にそのようなものをコーディングしましたが、スキャンの問題を無視して署名で人を識別しなければならなかったとき、人々は時々名前S. Surname、NS、または単にName Surnameで署名します(これはおそらくあなたの別のことですソリューションでは、アルゴリズムが2番目の名前を無視できるようにすることを検討する必要がありますが、状況によっては、誰かの2番目の名前を省略することはかなりまれです)。

于 2010-09-14T14:21:22.300 に答える