Python字符串比较相似性

Ram*_*nan 3 python

我试图比较两个数据列表,其中有一些自由文本表示相同的对象.例

List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子,但问题是可能有许多变化,如大小写的变化或添加一些"." 之间.是否有任何python包可以进行比较并给出相似度量?

AKX*_*AKX 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))
Run Code Online (Sandbox Code Playgroud)

会打印

'abc LLC' -> 'abcllc'
'xyz, LLC' -> 'xyzllc'
'abc , LLC' -> 'abcllc'
'xyz LLC' -> 'xyzllc'
Run Code Online (Sandbox Code Playgroud)