簡體   English   中英

如何使用 SequenceMatcher 查找兩個字符串之間的相似性?

[英]How to use SequenceMatcher to find similarity between two strings?

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

克服這個問題的一種方法(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

None參數的含義是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM