我有两个需要统一的不同格式的公司列表(较长列表中的> 2k个条目)。我知道这两种格式大约有80%的时间共享存根,因此我正在使用模糊匹配来比较两个列表:
def get_fuzz_score(str1, str2):
from fuzzywuzzy import fuzz
partial_ratio = fuzz.partial_ratio(str1, str2)
return partial_ratio
a = ['Express Scripts', 'Catamaran Corp', 'Banmedica SA (96.7892%)', 'WebMD', 'ODC', 'Caremerge LLC (Stake%)']
b = ['Doctor on Demand', 'Catamaran', 'Express Scripts Holding Corp', 'ODC, Inc.', 'WebMD Health Services', 'Banmedica']
for i in b:
for j in a:
if get_fuzz_score(i, j) > 80:
# process
我很欣赏关于如何优化此任务以提高性能的想法(例如,不必为循环使用2)。
我假设您同时安装了Fuzzywuzzy和python-Levenshtein。第二个软件包的安装失败,因此我收到一条消息:
warnings.warn('使用慢速纯Python SequenceMatcher。安装python-Levenshtein删除此警告')
您可以使用itertools.product创建笛卡尔乘积:
from itertools import product
from fuzzywuzzy import fuzz
def get_fuzz_score(str1, str2):
partial_ratio = fuzz.partial_ratio(str1, str2)
return partial_ratio
a = ['Express Scripts', 'Catamaran Corp', 'Banmedica SA (96.7892%)', 'WebMD', 'ODC', 'Caremerge LLC (Stake%)']
b = ['Doctor on Demand', 'Catamaran', 'Express Scripts Holding Corp', 'ODC, Inc.', 'WebMD Health Services', 'Banmedica']
for first, second in product(a, b):
if get_fuzz_score(first, second) > 80:
# process
如果您的函数get_fuzz_score没有增长,则可以使其过时:
from itertools import product
from fuzzywuzzy import fuzz #
a = ['Express Scripts', 'Catamaran Corp', 'Banmedica SA (96.7892%)', 'WebMD', 'ODC', 'Caremerge LLC (Stake%)']
b = ['Doctor on Demand', 'Catamaran', 'Express Scripts Holding Corp', 'ODC, Inc.', 'WebMD Health Services', 'Banmedica']
for first, second in product(a, b):
if fuzz.partial_ratio(first, second) > 80:
pass # process
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句