我有一个 Excel 文件,其中一列包含 1000 多个公司名称,另一列包含大约 20,000 个公司名称。
目标是匹配尽可能多的名字。问题是第一列 (1000+) 中的名称格式不正确,这意味着“公司名称”字符串可能类似于 "9Com(panynAm9e00"。我我正在尝试找出解决此问题的最佳方法。(只有 12 个名称完全匹配)
尝试不同的方法后,我最终尝试使用正则表达式匹配每个名称中的 4-5 个或更多字符,具体取决于每个字符串的长度。但我只是在努力寻找最有效的方法来做到这一点。
例如:
第 1 列
1. 9Com(panynAm9e00
2. NikE4
3. Mitrosof2
第 2 列
1. Microsoft
2. Company Name
3. Nike
获取第 1 列 中的第一个元素并在第 2 列 中查找匹配项。如果没有完全匹配,则查找具有 4-5 个相同字符的字符串。
有什么建议吗?
请您参考如下方法:
我建议使用 pandas 和 pd.read_excel() 读取您的 Excel 文件,然后使用 fuzzywuzzy 执行匹配,因为示例:
import pandas as pd
from fuzzywuzzy import process, fuzz
df = pd.DataFrame([['9Com(panynAm9e00'],
['NikE4'],
['Mitrosof2']],
columns=['Name'])
known_list = ['Microsoft','Company Name','Nike']
def find_match(x):
match = process.extractOne(x, known_list, scorer=fuzz.partial_token_sort_ratio)[0]
return match
df['match found'] = [find_match(row) for row in df['Name']]
产量:
Name match found
0 9Com(panynAm9e00 Company Name
1 NikE4 Nike
2 Mitrosof2 Microsoft
