import difflib
a='abcd'
b='ab123'
seq=difflib.SequenceMatcher(a=a.lower(),b=b.lower())
seq=difflib.SequenceMatcher(a,b)
d=seq.ratio()*100
print d
上記のコードを使用しましたが、得られた出力は0.0です。どうすれば有効な回答を得ることができますか?
SequenceMatcherの最初のパラメーターを忘れました。
>>> import difflib
>>>
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444
ドキュメントから:
SequenceMatcher クラスには次のコンストラクタがあります。
class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)
あなたのコードの問題は、
seq=difflib.SequenceMatcher(a,b)
a
の値としてisjunk
を、b
の値としてa
を渡し、b
のデフォルトの''
値を残しています。これは、0.0
の比率になります。
これを克服する1つの方法(すでにLennartによって言及されています)は、None
を追加の最初のパラメーターとして明示的に渡して、すべてのキーワード引数に正しい値が割り当てられるようにすることです。
しかし、私は見つけて、isjunk
引数に触れず、set_seqs()
メソッドを使用して別のシーケンスを指定する別の解決策について言及したいと思います。
>>> import difflib
>>> a = 'abcd'
>>> b = 'ab123'
>>> seq = difflib.SequenceMatcher()
>>> seq.set_seqs(a.lower(), b.lower())
>>> d = seq.ratio()*100
>>> print d
44.44444444444444