You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:15:36