私は、潜在的に「乱雑な」エンティティ名の入力セットを参照リスト内の「クリーンな」エンティティ名に一致させようとするアプリケーションに取り組んでいます。私は編集距離やその他の一般的なあいまい一致アルゴリズムを使用してきましたが、一般的な用語のあいまい一致での重みが少なくなるように、用語の重み付けを可能にするより良いアプローチがあるかどうか疑問に思っています。
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」のようになるように、用語の頻度をあいまい文字列のマッチングに統合する方法(必ずしも使用する必要はありません)のアイデアを探しています。 "例。 INSTITUTE
SEMICONDUCTOR
MANUFACTURING
CORP
difflib
大きな「頻度の高い用語」のリストを作成して比較から除外することもできますが、一般的な単語でも情報が追加されるため、可能であれば頻度を使用したいと思います。もちろん、リストのカットオフポイントも任意である。