0

我需要一些关于 Python 的帮助。这不是从列表 A 中减去列表 B 来制作列表 C 的经典方法。相反,我想查看列表 A 中不在列表 B 中的项目的索引(单个单词中的城市名称),并将它们存储到一个新的列表 C。另外,列表 B 中的匹配项与列表 A 中的不完全相同,它们来自 OCR,所以它们拼写错误很少,如果它们 90% 相似,我想考虑匹配。

例如

列表 A:#所有列表项都是一个单词中的城市名称

0. Corneria
1. klandasco
2. Blue_Mars
3. Setiro
4. Jeti_lo
5. Neo_Tokyo

列表 B:#citynames 拼写错误

0. lcandasco
1. Ne0_Tolcyo

所以,结果应该是...

清单 C:

[0, 2, 3, 4]

结果项目并不重要(Corneria、Blue_Mars、Setiro、Jeti_lo),相反,一旦进行减法,我需要保留列表 A 中项目的原始索引。

到目前为止,我正在这样做......

a = ["aaa", "bbb", "ccc", "ddd", "ccc", "eee"]
b = ["bbb", "eee"]
c = [i for i, v in enumerate(a) if v not in b]
print(c)

输出...

[0, 2, 3, 4]

但是我需要实现 difflib 部分以匹配具有 90% 相似性的项目,我怎么能只使用纯 python 脚本来做到这一点,(最好只使用 difflib)???

4

1 回答 1

0

这个怎么样:

from difflib import SequenceMatcher

max_ratio = 0.9

c = [i for i, v in enumerate(a) 
     if not any(map(lambda x: SequenceMatcher(None, v, x).ratio()>=max_ratio, b))]

使用的片段fuzzywuzzy

from fuzzywuzzy import fuzz

max_ratio = 90

c = [i for i, v in enumerate(a) 
     if not any(map(lambda x: fuzz.ratio(v, x)>=max_ratio, b))]

笔记。在使用之前,fuzzywuzzy您应该安装它。

于 2015-05-04T16:23:03.067 回答