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

Python:优化fuzzywuzzy实现含多语言的品牌名称模糊匹配纠错

解决日文与英文品牌名的模糊匹配问题

遇到日文假名(比如「ソニー」)和英文(比如「sony」)无法用fuzzywuzzy直接匹配的问题,核心原因是两者的字符编码和字符集完全不同,直接比较字符串相似度自然得分为0。这里提供两种可行的解决方案:

方法一:将日文转换为罗马音(通用方案)

通过把日文假名转换成对应的罗马音(罗马字),让两者处于同一字符体系下再进行模糊匹配。推荐使用pykakasi库来完成日文到罗马音的转换:

步骤1:安装依赖库

pip install pykakasi fuzzywuzzy python-Levenshtein

(python-Levenshtein是可选的,但能大幅提升fuzzywuzzy的匹配速度)

步骤2:编写转换与匹配代码

from fuzzywuzzy import fuzz
import pykakasi

# 初始化日文转罗马音的转换器
kakasi = pykakasi.kakasi()
# 设置转换模式:平假名、片假名、汉字都转为罗马音
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')
converter = kakasi.getConverter()

# 处理日文品牌名
japanese_brand = "ソニー"
# 转换为罗马音并统一转为小写
romanized_brand = converter.do(japanese_brand).lower()
# 输出转换结果:sonii
print(romanized_brand)

# 现在进行模糊匹配
score = fuzz.ratio("sony", romanized_brand)
print(f"匹配得分:{score}")  # 输出80,足够判断为同一品牌

优化点:处理长音

如果想让罗马音更贴近英文拼写,可以把罗马音中的长音(比如ī)替换成对应的短元音:

# 替换长音符号,让罗马音更接近英文拼写
romanized_brand = romanized_brand.replace("ī", "i").replace("ū", "u").replace("ā", "a")
# 替换后变为soni,和sony的匹配得分为75
print(fuzz.ratio("sony", romanized_brand))

方法二:建立品牌名映射字典(精准方案)

如果你的品牌集合是固定的,可以预先建立一个包含日文、错误拼写到标准品牌名的映射字典,这种方法匹配准确率最高:

brand_mapping = {
    "ソニー": "sony",
    "sonii": "sony",
    "SONY": "sony",
    "nakia": "nokia",
    "samsumg": "samsung"
    # 其他需要映射的拼写可以继续补充
}

def get_standard_brand(brand_name):
    # 先转小写处理大小写问题
    lower_name = brand_name.lower()
    # 优先从映射字典获取标准名,没有则返回原名称
    return brand_mapping.get(lower_name, brand_name)

# 使用示例
print(get_standard_brand("ソニー"))  # 输出sony
print(get_standard_brand("SONY"))   # 输出sony

之后你可以基于标准品牌名进行匹配或统计,完全避免字符体系差异的问题。

额外小技巧

  • 对于大小写不一致的情况(比如SONY和sony),统一转为小写后再匹配,能有效提升匹配得分。
  • 如果不需要严格的全字符串匹配,可以试试fuzz.partial_ratio或fuzz.token_sort_ratio,这些方法对部分匹配或字符顺序差异更友好。

内容的提问来源于stack exchange,提问作者Lara19

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:53