基于Python实现跨国客户/供应商相似名称匹配的技术问询
多地区客户/供应商名称匹配的Python工具方案
针对不同地区SQL表中同一主体名称相似、ID不同的问题,以下是实用的Python库及落地指引:
核心匹配库推荐
1. rapidfuzz(高性能模糊匹配首选)
适合处理拼写近似的名称(比如HARALAMPOS/CHARALAMPOS),速度比传统的fuzzywuzzy快数倍,适配批量数据处理场景。
- 核心模块:
rapidfuzz.fuzz(计算相似度得分)、rapidfuzz.process(批量匹配) - 关键用法:
- 用
fuzz.ratio()计算名称整体相似度,fuzz.partial_ratio()可忽略前缀后缀差异(比如LOS HERMANOS/Hermanos) - 用
process.extractOne()给每个名称从基准列表中匹配最相似结果,建议设置80分左右的相似度阈值(可根据样本调整)
- 用
- 预处理配合示例:
import pandas as pd from rapidfuzz import process, fuzz # 名称清洗函数:统一格式、移除无意义前缀 def clean_name(name): if pd.isna(name): return "" cleaned = name.lower().replace(r"[^\w\s]", "", regex=True) # 移除各地区常见无意义前缀 prefixes = ["los ", "the ", "de ", "el ", "der "] for prefix in prefixes: if cleaned.startswith(prefix): cleaned = cleaned[len(prefix):] return cleaned.strip() # 合并多地区数据并清洗名称 df = pd.concat([us_df, gr_df, de_df...]) # 替换为你的8个地区数据表 df["cleaned_name"] = df["supplier_name"].apply(clean_name) # 选取数据最规范的地区作为匹配基准 base_names = df[df["country"] == "US"]["cleaned_name"].unique().tolist() base_id_map = df[df["country"] == "US"].set_index("cleaned_name")["supplier_id"].to_dict() # 批量生成统一ID def get_unified_id(cleaned_name): if not cleaned_name: return None, None match, score, _ = process.extractOne(cleaned_name, base_names, scorer=fuzz.partial_ratio) if score >= 80: return base_id_map[match], match return None, cleaned_name df[["unified_supplier_id", "unified_name"]] = df["cleaned_name"].apply(lambda x: pd.Series(get_unified_id(x)))
2. spaCy(跨语言名称变体处理)
如果涉及不同语言的名称变体(比如德语/西班牙语的同一主体名称),spaCy的多语言模型可完成词干提取、实体标准化:
- 核心模块:
spacy(加载多语言模型xx_ent_wiki_sm) - 关键用法:先通过模型提取名称的标准化词干(比如把"LOS HERMANOS"处理成"hermanos"),再结合rapidfuzz做匹配
3. pandas 字符串处理(基础清洗必备)
所有匹配的前提是数据标准化,pandas的str方法可快速完成基础清洗:
df["name"].str.lower():统一大小写df["name"].str.replace(r"[^\w\s]", "", regex=True):移除标点符号df["name"].str.strip():去除首尾空格
落地步骤
- 数据整合:从8个国家的SQL表中提取客户/供应商ID、名称、国家字段,合并为单个DataFrame
- 标准化清洗:用上述clean_name函数统一名称格式
- 建立基准库:选择数据最规范的地区名称作为匹配基准
- 批量匹配:用rapidfuzz或spaCy完成匹配,设置合理相似度阈值
- 人工校验:对得分较低的匹配结果做人工审核,修正错误匹配
- 导出数据:将带有统一ID的数据集导出为CSV/Parquet,直接导入PBI制作报表
内容的提问来源于stack exchange,提问作者Lefteris Kyprianou
相关产品推荐
相关产品推荐

