我有两个清单。第一个列表包含来自数据库的值;第二个列表包含来自用户的文件中的一组单词。
list_with_name_in_BD = [
'LOPEZ TRANSPORT',
'LOPEZ TRANSPORTATION',
'Lopez Transport',
'napora inc',
'Narain Transport Ltd'
]
此列表中的项目总数约为 300.000
list_with_words_in_file = [
'Description', 'Load', 'Rate', 'Amount', '$1950.00',
'Please', 'note', 'Lopez transport'
]
这个列表中的元素总数约为1000个
我的任务是找到两个列表之间最相似(或完全相同)的元素。也就是说,正如您所看到的,两个列表之间不存在相同的元素(尽管可能存在),但存在相似的元素。因此,在输出中,我想获得两个列表之间最相似(或相同的元素)的列表。也就是说,结果应该如下。
output = [
'Lopez Transport',
'LOPEZ TRANSPORT',
'LOPEZ TRANSPORTATION'
]
我将非常感谢您给我的任何帮助和建议。
rapidfuzz 在这里可能有用。
extract
特别可以采用预处理函数(在您的情况下为str.lower
)、截止分数和记分器作为参数。
看看以下是否给嵌套循环带来一些改进:
from rapidfuzz import process
list_with_name_in_DB = ["LOPEZ TRANSPORT", "LOPEZ TRANSPORTATION", "Lopez Transport", "napora inc", "Narain Transport Ltd"]
list_with_words_in_file = ['Description', 'Load', 'Rate', 'Amount', '$1950.00', 'Please', 'note', 'Lopez transport']
res = []
for e in list_with_words_in_file:
r = process.extract(e, list_with_name_in_DB, processor=str.lower, score_cutoff=80)
res += r
print(res)
输出:
[('LOPEZ TRANSPORT', 100.0, 0), ('Lopez Transport', 100.0, 2), ('LOPEZ TRANSPORTATION', 85.71428571428572, 1)]