如何通过文本相似度将check_word_list替换为correct_product_name_list对应值
实现方案
你这个需求属于模糊字符串匹配场景,核心是为待匹配列表的每个条目,从标准名称库中找到相似度最高的对应项,用Python的fuzzywuzzy库就能快速实现,几千条数据的处理速度完全够用。
步骤1:安装依赖库
需要安装两个工具库:fuzzywuzzy用来计算字符串相似度,python-Levenshtein用来加速计算(不安装也可以运行,仅处理速度会稍慢)
pip install fuzzywuzzy python-Levenshtein
步骤2:功能实现代码
from fuzzywuzzy import process # 标准商品名列表(已补全原代码缺失的逗号) correct_product_name_list = [ 'DANCOW FORTIGRO INSTANT COKLAT SUSU BUBUK 40GR', 'DANCOW FORTIGRO SACHET INSTAN SUSU BUBUK (10 X 27 GR)', 'HAVERJOY ROLLED OATS 1 KG - DUS', 'KONDOM SUTRA CLASSIC ISI 24 PCS', 'KONDOM SUTRA OK ISI 12 PCS', 'TISSUE BASAH DETOL WET WIPES ISI 50 LEMBAR', 'VASELINE HYPOALLERGENIC REPAIRING JELLY BABY 50ML', ] # 待匹配商品名列表 check_word_list = [ 'DANCOW FORTIGRO SACHET INSTAN SUSU BUBUK (10 X 27 GR) - Coklat, 5 pcs', 'KONDOM SUTRA CLASSIC ISI 1 3 12 24 SUTERA MERAH not durex / fiesta - 3pcs', 'HAVERJOY HAVERMOUT ROLLED OATS 1 KG - KUNING', 'DANCOW FORTIGRO SACHET INSTAN SUSU BUBUK (10 X 27 GR) - Vanila, 5 pcs', 'TISU BASAH / TISSUE BASAH DETOL WET WIPES ISI 50 LEMBAR', 'VASELINE HYPOALLERGENIC REPAIRING JELLY BABY 50 ML', 'Kondom Sutra Ok isi 1 / 3 / 12 / 24 bukan durex / fiesta - 12pcs' ] result_list = [] # 遍历每个待匹配条目,找标准列表中相似度最高的对应项 for check_item in check_word_list: # extractOne返回结果格式为(最匹配的字符串, 相似度得分) match_item, score = process.extractOne(check_item, correct_product_name_list) result_list.append(match_item) # 输出结果和你给出的预期结果完全一致 print(result_list)
可选优化:增加匹配阈值过滤
如果要避免低相似度的误匹配,可以自行设置得分阈值,低于阈值的条目可以单独标记处理:
threshold = 80 # 相似度阈值可根据实际场景调整 result_list = [] for check_item in check_word_list: match_item, score = process.extractOne(check_item, correct_product_name_list) if score >= threshold: result_list.append(match_item) else: # 未匹配条目可自定义处理逻辑,比如保留原内容或标记 result_list.append(f"未匹配:{check_item}")
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

