查找两个列表之间最大相似的字符串

问题描述 投票:0回答:1

我有两个清单。第一个列表包含来自数据库的值;第二个列表包含来自用户的文件中的一组单词。

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'
]

我将非常感谢您给我的任何帮助和建议。

python list performance intersection
1个回答
1
投票

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)]
© www.soinside.com 2019 - 2024. All rights reserved.