web-dev-qa-db-ja.com

SequenceMatcherを使用して2つの文字列間の類似性を見つける方法は?

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です。どうすれば有効な回答を得ることができますか?

27
joolie

SequenceMatcherの最初のパラメーターを忘れました。

>>> import difflib
>>> 
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444

http://docs.python.org/library/difflib.html

40
Lennart Regebro

ドキュメントから:

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
17
Tim Castelijns