同じオブジェクトを示すフリー テキストを含む 2 つのデータ リストを比較しようとしています。例
List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
これは単純な例ですが、問題は大文字と小文字の変更や「.」の追加など、多くの変更がある可能性があることです。間に。比較を行い、類似度を測定できる python パッケージはありますか?
同じオブジェクトを示すフリー テキストを含む 2 つのデータ リストを比較しようとしています。例
List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
これは単純な例ですが、問題は大文字と小文字の変更や「.」の追加など、多くの変更がある可能性があることです。間に。比較を行い、類似度を測定できる python パッケージはありますか?
Wikibooksの例のように、非正確な文字列マッチングにはレーベンシュタイン距離アルゴリズムの実装を使用できます。
別のオプションは、たとえば、生の比較の前にすべてを小文字に折りたたんだり、スペースを削除したりすることです。これはもちろん、ユースケースによって異なります。
import string, unicodedata
allowed = string.letters + string.digits
def fold(s):
s = unicodedata.normalize("NFKD", unicode(s).lower()).encode("ascii", "ignore")
s = "".join(c for c in s if c in allowed)
return s
for example in ['abc LLC','xyz, LLC', 'abc , LLC','xyz LLC']:
print "%r -> %r" % (example, fold(example))
印刷します
'abc LLC' -> 'abcllc'
'xyz, LLC' -> 'xyzllc'
'abc , LLC' -> 'abcllc'
'xyz LLC' -> 'xyzllc'
文字列間のレーベンシュタイン距離 (編集距離) を使用して類似性を推定する優れたバイナリ ライブラリがあります。試してみる: