如何使用SequenceMatcher查找两个字符串之间的相似性?
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。我怎样才能得到有效的答案?
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
I used the above code but obtained output is 0.0. How can I get a valid answer?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您忘记了 SequenceMatcher 的第一个参数。
http://docs.python.org/library/difflib.html
You forgot the first parameter to SequenceMatcher.
http://docs.python.org/library/difflib.html
来自文档:
代码中的问题是,通过这样做,
您将
a
作为的值传递isjunk
和b
作为a
的值,为b
保留默认的''
值。这会导致比率为0.0
。克服这个问题的一种方法(Lennart 已经提到过)是显式传递
None
作为额外的第一个参数,以便为所有关键字参数分配正确的值。然而我刚刚发现,并想提及另一个解决方案,它不触及 isjunk 参数,而是使用 set_seqs() 方法来指定不同的序列。
From the docs:
The problem in your code is that by doing
you are passing
a
as value forisjunk
andb
as value fora
, leaving the default''
value forb
. This results in a ratio of0.0
.One way to overcome this (already mentioned by Lennart) is to explicitly pass
None
as extra first parameter so all the keyword arguments get assigned the correct values.However I just found, and wanted to mention another solution, that doesn't touch the
isjunk
argument but uses theset_seqs()
method to specify the different sequences.