2012-04-04 18 views
3

同じオブジェクトを示すいくつかのフリーテキストを持つ2つのデータのリストを比較しようとしています。例Pythonの文字列の比較の類似性

List 1 ['abc LLC','xyz, LLC'] 
List 2 ['abc , LLC','xyz LLC'] 

これは簡単な例ですが、問題が発生した場合や変更を加えるなど、多くの変更がある可能性があります。間に比較を行い、類似性の指標を与えるPythonパッケージはありますか?

+0

「確率」とはどういう意味ですか? –

+0

@OliCharlesworth私は、著者が2つの文字列間の類似性のパーセンテージを見つけたいと思っています。文字列が85%の場合と同様です。 – bezmax

+0

あなたは "確率"を望んでいない、あなたは "類似性"をしたい。 @stackoverflow.com/questions/682367/good-python-modules-for-fuzzy-string-comparison – Joe

答えて

7

たとえば、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' 
関連する問題