同じオブジェクトを示すいくつかのフリーテキストを持つ2つのデータのリストを比較しようとしています。例Pythonの文字列の比較の類似性
List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
これは簡単な例ですが、問題が発生した場合や変更を加えるなど、多くの変更がある可能性があります。間に比較を行い、類似性の指標を与えるPythonパッケージはありますか?
同じオブジェクトを示すいくつかのフリーテキストを持つ2つのデータのリストを比較しようとしています。例Pythonの文字列の比較の類似性
List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
これは簡単な例ですが、問題が発生した場合や変更を加えるなど、多くの変更がある可能性があります。間に比較を行い、類似性の指標を与えるPythonパッケージはありますか?
たとえば、this one from Wikibooksのように、正確でない文字列マッチングのためにLevenshtein Distanceアルゴリズムの実装を使用できます。
別のオプションは、にも例えば、前生の比較になど、小文字にすべてを折るスペースを削除します - もちろん、これはあなたのユースケースによって異なります。
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'
類似性を評価するために文字列間の距離(編集距離)を使用する優れたバイナリライブラリがあります。試してみてください:
「確率」とはどういう意味ですか? –
@OliCharlesworth私は、著者が2つの文字列間の類似性のパーセンテージを見つけたいと思っています。文字列が85%の場合と同様です。 – bezmax
あなたは "確率"を望んでいない、あなたは "類似性"をしたい。 @stackoverflow.com/questions/682367/good-python-modules-for-fuzzy-string-comparison – Joe