从列表 A 中减去列表 B,但保留列表 A 索引并使用 difflib 字符串相似性
Subtract List B from List A, but keeping the List A index and using difflib string similarity
我在 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)来做到这一点???
这个怎么样:
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
之前,您应该安装它。
我在 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)来做到这一点???
这个怎么样:
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
之前,您应该安装它。