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

StackOverflow https://stackoverflow.com/questions/4802137

  •  22-10-2019
  •  | 
  •  

質問

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

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

他のヒント

ドキュメントから:

SequenceMatcher クラスにはこのコンストラクターがあります:

class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)

コードの問題は、それを行うことです

seq=difflib.SequenceMatcher(a,b)

あなたは通り過ぎています a の価値として isjunkb の価値として 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top