が投稿したgauden
ようSequenceMatcher
にdifflib
、簡単な方法です。を使用すると、ドキュメントから、2 つの文字列間の類似性の間の値とそれに対応する値ratio()
が返されます。0
1
ここで、T は両方のシーケンスの要素の総数、M は一致の数です。これは 2.0*M / T です。シーケンスが同一の場合は 1.0、共通点がない場合は 0.0 であることに注意してください。
例:
>>> import difflib
>>> difflib.SequenceMatcher(None,'no information available','n0 inf0rmation available').ratio()
0.91666666666666663
またget_close_matches
、便利な もあります。距離カットオフを指定すると、リストからその距離内にあるすべての一致が返されます。
>>> difflib.get_close_matches('unicorn', ['unicycle', 'uncorn', 'corny',
'house'], cutoff=0.8)
['uncorn']
>>> difflib.get_close_matches('unicorn', ['unicycle' 'uncorn', 'corny',
'house'], cutoff=0.5)
['uncorn', 'corny', 'unicycle']
更新:部分的なサブシーケンスの一致を見つける
3 つの単語シーケンスに近い一致を見つけるには、テキストを単語に分割し、それらを 3 つの単語シーケンスにグループ化してから、次difflib.get_close_matches
のように適用します。
import difflib
text = "Here is the text we are trying to match across to find the three word
sequence n0 inf0rmation available I wonder if we will find it?"
words = text.split()
three = [' '.join([i,j,k]) for i,j,k in zip(words, words[1:], words[2:])]
print difflib.get_close_matches('no information available', three, cutoff=0.9)
#Oyutput:
['n0 inf0rmation available']