Python字符串比较相似度

3

我正在尝试比较两个数据列表,其中包含一些自由文本,表示相同的对象。例如:

List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']

这是一个简单的例子,但问题在于可能会有很多变化,比如大小写的更改或在中间添加一些“。”。是否有任何Python包可以进行比较并给出相似度的度量?


什么是“概率”? - Oliver Charlesworth
@OliCharlesworth 我认为作者想要找到两个字符串之间的相似度百分比。比如说,如果这两个字符串相似度为85%。 - bezmax
你不需要“概率”,你需要“相似度”。 - Joe
@Max,是的,这就是我想说的。谢谢。 - Raman Narayanan
我认为您需要更精确定义您的问题:您要检测什么类型的相似性?您的相似性的数学定义是什么?否则,人们只能猜测您的意图。或许这就是您的问题:您想让人们建议您一个相似性定义(例如Levenshtein距离)? - HongboZhu
可能是查找两个字符串之间的相似度度量的重复问题。 - Trilarion
2个回答

7
你可以使用Levenshtein Distance算法的实现进行非精确字符串匹配,比如Wikibooks上的这个
另一个选择是,在进行原始比较之前将所有内容转换为小写、去除空格等。当然,这取决于你的用例。
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'

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接