4 に答える
既存のメトリックは短いフレーズに偏っているように見えるため、バイグラムをミックスに含めることを検討する必要があります。そのため、個々の単語だけのスコアを考慮するのではなく、連続する単語のペアのスコアも考慮します (例: 「nivea deo」、「deo roll-on」、「roll-on dry」など)。各タイトルのスコアを計算するときは、タイトルから一緒に生成できるすべてのユニグラムとバイグラムのスコアを考慮に入れますが、バイグラムにより多くの重みを与えると、アルゴリズムがより長いフレーズを優先するようになります。
これらのような多くの名前を自由に使用できる大規模な既存のコーパスがある場合は、TF-IDF の
ようなものを使用することを検討してください
。グローバル コーパスを使用して、各ユニグラムとバイグラムの idf を計算できます。これは基本的に、単語またはフレーズがコーパス全体で一意であるか希少であるかの尺度です。
tf = これらの結果内で ngram を見た
回数
したがって、タイトルのスコアを計算するときは、単純に各 ngram の tf を合計するのではなく、各 ngram の tf*idf を合計します。まれな ngram (このアイテムを他のすべてのアイテムから区別するのに適している可能性があります) は idf が高いため、アルゴリズムはそれらに高い重みを与える必要があります。多くのジャンク ターム (Mindestabnahme など) は idf が非常に高くなりますが、tf が非常に小さいため、大きな違いは生じない可能性があります。または、ノイズを取り除くために、表示回数が k 回未満のトークンを削除します。
知っておくべきもう 1 つの NLP トリックは、レーベンシュタイン距離です。これは、2 つの文字列がどの程度似ているかを定量化する方法です。結果内の文字列のすべてのペア間のレーベンシュタイン距離を計算し、他のすべての文字列からの平均距離が最も小さい結果を優先してみることができます。これだけではうまくいかないかもしれません... しかし、このスコアを既存のアプローチに組み込むことで、いくつかのトリッキーなケースをナビゲートするのに役立つかもしれません。
私は:
- すべての文字列を小文字 (または大文字) に変換します
- すべての文字列に対して複数の配列アラインメントを行う
- 元のケースに戻す
- すべての列で最も頻繁に使用される文字を見つける
- 隙間を取り除く
あなたの例:
すべての文字列を小文字 (または大文字) に変換します
ニベア デオ ロールオン ドライインパクト 男性用 ニベア デオ ロール オン ドライ/ブラウ ニベア デオ ロールオン ドライ インパクト メンズ 50ml 3erパック (3×50ml) ニベア デオ ロールオン ドライ/ブラウ 50ml ニベア デオローラー 50ml ドライ 男性用 blau mindestabnahme: 6 stück (1 ve) ニベア デオローラー ドライインパクト 男性用 ニベア デオ ロール オン ドライ/ブラウ_50ml
すべての文字列に対して複数の配列アラインメントを行う
ニベア デオ ロール°°-オン°°ドライ°°°°°°°°°°男性への影響°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°° ニベア デオ ロール°° on °°dry/blau°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°°°°°°°°°° ニベア デオ ロール°°-オン°°ドライ°°°°°°°°°°男性用インパクト、50ml、3erパック(3×50ml)°°°°°°° ニベアデオロール°°オン°°ドライ/ブラウ°°°°°°°°°°°°°°°°°°°°50ml°°°°°°°°°°°°°°° °°°°°°°°°°°°° nivea deo°roller 50ml dry °°°°°°°°°°°°°°°°°男性用 blau mindestabnahme: 6 stück (1 ve) nivea deo°roller, °°°°dry °°°°°°°°°°男性への影響°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°° ニベア デオ ロール°° on °°dry/blau_50 ml°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°°°°°
(ここで
°
はギャップ文字を表します)元のケースに戻す
ニベア デオ ロール°°-オン°°ドライ°°°°°°°°°°男性への影響°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°° NIVEA DEO Roll°° on °°Dry/blau°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°°°°°°°°°° ニベア デオ ロール°°-オン°°ドライ°°°°°°°°°°男性用インパクト、50 ml、3er パック (3 x 50 ml)°°°°°°° ニベア デオ ロール°°オン°°ドライ/ブラウ°°°°°°°°°°°°°°°°°°°°50ml°°°°°°°°°°°°°°° °°°°°°°°°°°°° Nivea Deo°roller 50ml dry °°°°°°°°°°°°°°°°°男性用 blau Mindestabnahme: 6 Stück (1 VE) NIVEA Deo°roller, °°°°Dry °°°°°°°°°°インパクトフォーメン°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°° NIVEA DEO Roll°° on °°Dry/blau_50 ml°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°°°°°
すべての列で最も頻繁に使用される文字を見つける
ニベア デオ ロール°°オン°°ドライ°°°°°°°°°°°°°°°°男性用°°°°°°°°°°°°°°°°°°°° °°°°°°°°°°°°°°
隙間を取り除く
男性用ニベア デオ ロールオンドライ
ステップ 2 (複数の配列アラインメント) 以外はすべて簡単です。複数の配列アラインメントは、バイオインフォマティクスで一般的に使用されています。hereまたはhereまたはhere ... 確かに C または Java コードを見つけることができますが、PHP についてはわかりません。
アップデート:
マルチプル アラインメントを開始するには、いわゆる「スター アラインメント」とは、基本的に 1 つの配列 (「スター センター」) のペアワイズ アラインメントをすべて組み合わせたものです。ペアワイズ アラインメントは通常、動的計画法を使用して計算されます。たとえば、こちらまたはこちらを参照してください。複数のアライメントを生成するには、ストリングの 1 つをスターの中心に選択します。それと他のすべての文字列との間のペアワイズ アラインメントを見つけてから、ペアワイズ アラインメントにギャップを導入して、すべてのアラインメントの星の中心が完全に整列するようにします。前のステップの結果を次のステップの星の中心として使用して、収束するまで、つまり結果が変化しないまで、この手順を繰り返すことができます。
更新 2:単語全体をシンボル (量子、アトム) として
使用して整列させることもできます。A = nivea
などとしましょうB = deo
。これには次の利点があります。
- 単語はアラインメントによって変更できず、長さに関係なく同等に扱われます。
- ペアワイズ アラインメントを行う場合、TF-IDF とその同義語に従って、個々の単語 (「シンボル」) を置換するためのコストを割り当てることができます。ペアワイズ アラインメントは、配列間の (加重) レーベンシュタイン距離を最小化しようとします。
あなたの例では(自分で試してみてください)、これは次のようになります
Nivea Deo Roll on Dry for Men 50 ml
つまり、ここでも50 ml
. これは、2 文字の単語をスキップすることは、20 文字の単語をスキップすることよりも安くはないためです。
あなたは非常に優れた NLP 問題を抱えています。私は約1年前に同様の仕事をしました。adi92によるアプローチもお勧めします。ただし、NLP ソフトウェアを使用する必要がある場合は、スタンフォード NLP をお勧めします。ソフトウェアとそれぞれの出版物もここにあります。http://nlp.stanford.edu/これがお役に立てば幸いです。
私が正しく理解していれば、あなたはそれらの名前を既存のデータベースと照合していませんが、製品の実際の名前にできるだけ近づけようとしているので、ここに私の考えがあります:
- 通常のクリーンアップは行わず、余分な空白を削除するだけです。ストップ ワード、大文字と小文字、区切り文字 (ハイフンなど) はそのままにしておきます。
- 文字列を空白で用語に分割します。
- 区切り記号、数字/文字、大文字と小文字で用語を分割しますが、元の用語は削除せず、分割された用語の直後に追加するだけで、すべての用語を小文字にし、重複する用語と空の用語を削除します
- 文字列の固定 % で一般的でない用語を削除します (40 または 95% である必要がある場合は、テスト後にわかります) - これにより、マーチャントによって追加されたすべてではないにしても、ほとんどが削除されます。
- 各用語の最も一般的な位置を見つけます。
- 最も一般的な位置が同じ用語が複数ある場合は、どの用語が他の用語よりも前にあるのかを確認してください。「緩い」位置を 1 増やし、競合がなくなるまで繰り返します
- 残っている用語ごとに、最も一般的な大文字を選択してください
- 残りの項をマージ
あなたの例を使用すると、次のように機能します。
ステップ1:
ニベア デオ ロールオン ドライ インパクト メンズ
ニベア デオ ロールオン ドライ/ブラウ
男性用ニベア デオ ロールオン ドライ インパクト、50 ml、3er パック (3 x 50 ml)
ニベア デオ ロール オン ドライ/ブラウ 50 ml
Nivea Deoroller 50ml dry for Men blau Mindestabnahme: 6 Stück (1 VE)
NIVEA デオローラー ドライインパクト 男性用
NIVEA DEO ロールオンドライ/ブラウ_50ml
ステップ2:
ニベア デオ ロールオン ドライ インパクト 男性用
NIVEA、DEO、ロール、オン、ドライ/ブラウ
ニベア デオ ロールオン ドライ インパクト用 男性用 50ml 3er パック (3, x, 50, ml)
ニベア、デオ、ロール、オン、ドライ/ブラウ、50、ml
ニベア、デオローラー、50ml、ドライ、男性用、ブラウ、ミンデタブナーメ:、6、シュトゥック、(1、VE)
NIVEA デオローラー ドライ インパクト 男性用
ニベア、DEO、ロール、オン、ドライ/ブラウ_50、ml
ステップ 3:
ニベア、デオ、ロールオン、ロール、オン、ドライ、インパクト、フォー、メンズ
ニベア、デオ、ロール、オン、ドライ/ブラウ、ドライ、ブラウ
ニベア、デオ、ロールオン、ロール、オン、ドライ、インパクト、フォー、メン、50、ml、3er、パック、3、x、50、ml
ニベア、デオ、ロール、オン、ドライ、ブラウ、50、ml
ニベア, デオローラー, 50ml, 50, ml, 乾燥, 男性用, ブラウ, マインドスタブナーメ, 6, スタック, 1, ve
ニベア、デローラー、ドライ、インパクト、男性用
ニベア、デオ、ロール、オン、ドライ/ブラウ、ドライ、ブラウ、50、ml
ステップ 4: (しきい値を 60% と仮定)
ニベア、デオ、ロール、オン、ドライ、フォー、メンズ
ニベア、デオ、ロール、オン、ドライ、ブラウ
ニベア、デオ、ロール、オン、ドライ、フォー、メンズ、50、ml
ニベア、デオ、ロール、オン、ドライ、50、ml
ニベア 50ml ドライ 男性用 ブラウ
ニベア ドライ 男性用
ニベア、デオ、ロール、オン、ドライ、ブラウ、50、ml
ステップ 5:
ニベア => 1
デオ => 2
ロール => 3
オン => 4
ドライ => 5
=> 6 の場合
男性 => 7
ブラウ => 6
50 => 8、6、2、7
ml => 8、7、3、8
ステップ 6:
ニベア => 1
デオ => 2
ロール => 3
オン => 4
ドライ => 5
ブラウ => 6
=> 7 の場合
男性 => 8
50 => 9
ミリリットル => 10
ステップ 7
ニベア、デオ、ロールオン、ドライ、ブラウフォー、メンズ、50ml
ステップ 8
最終結果:ニベア デオ ロール オン ドライ ブラウ 男性用 50 ml
この方法には次の問題があります。
- 重複する用語を含む名前を適切に処理しません (またはまったく - 最初の用語以降のすべての用語の出現が失われます)。
- ハイフンで区切られた、または大文字と小文字で区切られた (ProductName) 名前の部分をスペースで区切られた部分に分割する傾向があります。これは、手順 8 で最も一般的なバージョンを確認すると修正できます。