我正在尝试比较两个数据列表,其中包含一些自由文本,表示相同的对象。例如:
List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
这是一个简单的例子,但问题在于可能会有很多变化,比如大小写的更改或在中间添加一些“。”。是否有任何Python包可以进行比较并给出相似度的度量?
我正在尝试比较两个数据列表,其中包含一些自由文本,表示相同的对象。例如:
List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
这是一个简单的例子,但问题在于可能会有很多变化,比如大小写的更改或在中间添加一些“。”。是否有任何Python包可以进行比较并给出相似度的度量?
import string, unicodedata
allowed = string.letters + string.digits
def fold(s):
s = unicodedata.normalize("NFKD", unicode(s).lower()).encode("ascii", "ignore")
s = "".join(c for c in s if c in allowed)
return s
for example in ['abc LLC','xyz, LLC', 'abc , LLC','xyz LLC']:
print "%r -> %r" % (example, fold(example))
将会打印
'abc LLC' -> 'abcllc'
'xyz, LLC' -> 'xyzllc'
'abc , LLC' -> 'abcllc'
'xyz LLC' -> 'xyzllc'
有一个优秀的二进制库,它使用字符串间的编辑距离(Levenshtein Distance)来估算相似度。不妨试试看: