16

私は、潜在的に「乱雑な」エンティティ名の入力セットを参照リスト内の「クリーンな」エンティティ名に一致させようとするアプリケーションに取り組んでいます。私は編集距離やその他の一般的なあいまい一致アルゴリズムを使用してきましたが、一般的な用語のあいまい一致での重みが少なくなるように、用語の重み付けを可能にするより良いアプローチがあるかどうか疑問に思っています。

Pythonのdifflibライブラリを使用して、この例を考えてみましょう。私は組織名を扱っています。組織名には多くの標準化されたコンポーネントが共通しているため、エンティティを区別するために使用することはできません。

from difflib import SequenceMatcher  
e1a = SequenceMatcher(None, "ZOECON RESEARCH INSTITUTE", 
                            "LONDON RESEARCH INSTITUTE")
print e1a.ratio()
0.88

e1b = SequenceMatcher(None, "ZOECON", "LONDON")
print e1b.ratio() 
0.333333333333

e2a = SequenceMatcher(None, "WORLDWIDE SEMICONDUCTOR MANUFACTURING CORP",
                            "TAIWAN SEMICONDUCTOR MANUFACTURING CORP")
print e2a.ratio() 
0.83950617284

e2b = SequenceMatcher(None, "WORLDWIDE",
                            "TAIWAN")
print e2b.ratio() 
0.133333333333

、、、、、およびは多くの組織名で頻繁に使用される一般的な用語であるためRESEARCH、どちらの例も文字列全体で高いスコアを獲得しています。スコアが一般的な用語の影響を受けず、結果が「e1b」と「e2b」のようになるように、用語の頻度をあいまい文字列のマッチングに統合する方法(必ずしも使用する必要はありません)のアイデアを探しています。 "例。 INSTITUTESEMICONDUCTORMANUFACTURINGCORPdifflib

大きな「頻度の高い用語」のリストを作成して比較から除外することもできますが、一般的な単語でも情報が追加されるため、可能であれば頻度を使用したいと思います。もちろん、リストのカットオフポイントも任意である。

4

4 に答える 4

2

各文字列を単語のリストに分割し、各単語で比較を実行して、一致する単語のスコアを保持するリストを取得するのはどうですか。次に、スコアを平均化し、最低/最高の間接一致または部分一致を見つけることができます...

自分の体重を追加する機能を提供します。

もちろん、次のようなオフセットを処理する必要があります..

「皮革のロンドン会社」

「レザーのロンドンカンパニー」

于 2012-10-10T18:16:15.530 に答える
2

ここにあなたのための奇妙なアイデアがあります:

入力を圧縮し、それを比較します。

たとえば、ハフマンまたは辞書コーダーを使用して入力を圧縮すると、一般的な用語が自動的に処理されます。タイプミスにはあまりうまくいかないかもしれませんが、あなたの例では、London はおそらく比較的一般的な単語ですが、スペルミスの Lundon はまったくなく、圧縮された用語間の相違は生の用語間の相違よりもはるかに高くなっています。

于 2012-10-08T19:20:35.690 に答える
1

私は別の異なるアプローチを提案しているだけです。実体名は参照リストに由来するとおっしゃっていたので、共著者名、製品/論文のタイトル、市、州、国などの住所など、追加のコンテキスト情報をお持ちでしょうか?

上記のような有用なコンテキストがある場合は、エンティティ間の関係から実際にエンティティのグラフを作成できます。関係は、たとえば次のようになります。

 Author-paper relation
 Co-author relation
 author-institute relation
 institute-city relation
 ....

次に、次の場所で詳細に説明されているグラフベースのエンティティ解決アプローチを使用します。

このアプローチは、共著者論文ドメインで非常に優れたパフォーマンスを発揮します。

于 2012-10-21T02:21:02.537 に答える
1

私の意見では、一般的な解決策は、類似性に関するあなたの考えと決して一致しません。データに関する暗黙の知識が得られるとすぐに、それを何らかの形でコードに組み込む必要があります。これは、固定された既存のソリューションをすぐに失格にします。

おそらく、いくつかの NLP テクニックのアイデアを得るために、http://nltk.org/を見た方がよいでしょう。データについて十分に説明していませんが、POS タガーは、関連性の高い用語と関連性の低い用語を特定するのに役立つ場合があります。都市、国などの名前を含む利用可能なデータベースは、データをさらに処理する前にクリーンアップするのに役立つ場合があります。

利用可能なツールは多数ありますが、高品質の出力を得るには、データとユース ケースに合わせてカスタマイズされたソリューションが必要です。

于 2012-10-08T19:43:18.187 に答える