用于字符串相似性比较的 Python 正则表达式



我发现库difflib中的SequenceMatcher可以返回两个字符串之间的相似性分数。然而,其中一个参数isjunk有点棘手,尤其是对于正则表达式。

以两个字符串为例:

a = 'Carrot 500g'
b = 'Cabbage 500g'
from difflib import SequenceMatcher
import re
def similar_0(a, b):
return SequenceMatcher(None, a, b).ratio()
similar_0(a, b)
def similar_1(a, b):
return SequenceMatcher(lambda x: bool(re.search(r'b(d)+([a-zA-Z])+b', x)), a, b).ratio()
similar_1(a, b)

在比较这两个字符串时,我想忽略上面的"500g"等所有单位信息。但是我使用similar_0similar_1得到了相同的结果。我真的很困惑isjunk如何在SequenceMatcher中作为论据工作。实现目的的正确方法是什么,或任何其他选择?

您的正则表达式不起作用,因为SequenceMatcher将单个字符传递给isjunk函数,而不是单词:

>>> SequenceMatcher(print, 'Carrot 500g', 'Cabbage 500g')
b
0
5
a
e
g
C

您应该在将它们传递给SequenceMatcher之前从两个字符串中删除垃圾:

a = re.sub(r'b(d)+([a-zA-Z])+b', '', a)
b = re.sub(r'b(d)+([a-zA-Z])+b', '', b)
print(similar_0(a, b))

最新更新