基于Python相似度匹配修正国家名称错误的问题求助
修复国家名称误替换问题
问题根源
当前代码会将所有单词替换为正确名称集合中相似度最高的词,即使该相似度极低(例如India与England的相似度)。这导致原本不需要替换的India被错误改成了England。
解决方案
添加相似度阈值,仅当原单词与正确名称的相似度超过阈值时才进行替换;同时增加逻辑,若原单词已在正确名称集合中则直接返回,避免无效计算。
修正后的代码
首先导入必要库:
from difflib import SequenceMatcher import pandas as pd
定义优化后的匹配函数:
def get_most_similar(word, wordlist, threshold=0.7): # 单词已在正确集合中,直接返回 if word in wordlist: return word top_similarity = 0.0 most_similar_word = word for candidate in wordlist: similarity = SequenceMatcher(None, word, candidate).ratio() if similarity > top_similarity: top_similarity = similarity most_similar_word = candidate # 仅相似度达标时才替换 return most_similar_word if top_similarity >= threshold else word
处理DataFrame:
# 构建示例数据 data = pd.DataFrame({ 'names': [1, 2, 3, 4, 5, 6], 'country': ['Austria', 'Autrisa', 'Egnald', 'Sweden', 'Swweden', 'India'] }) correct_names = {'Austria', 'England', 'Sweden'} # 应用函数并更新列 data['country'] = data['country'].apply(lambda x: get_most_similar(x, correct_names))
预期输出
执行后得到符合要求的结果:
names country 0 1 Austria 1 2 Austria 2 3 England 3 4 Sweden 4 5 Sweden 5 6 India
关键改动说明
- 阈值控制:默认设置0.7为相似度门槛,可根据需求调整。
- 提前返回:减少不必要的相似度计算,提升效率。
- 保留原词:无高相似度匹配时,保留原始单词,避免误替换。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

