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

如何检测门店名称变体与重复?求Python实现代码

门店名称重复与变体检测需求

我手头有约50个门店名称数据,需要检测其中是否存在名称变体及重复数据。之前试过Fuzzy工具但效果不好,目前这批数据没有重复,但我想学习存在重复数据时的检测代码。我之前用sqldf提取唯一值的代码如下:

import sqldf

q = """
    SELECT DISTINCT store_name
    FROM df
    ORDER BY store_name asc

"""

unique_sn = sqldf.run(q)
print(unique_sn.iloc[:,0:])

附:门店名称列表

序号store_name
03351 - Albuquerque, NM (XF)
13352 - Lakewood, CO (XF)
23353 - Colorado Springs, CO (XF)
33354 - Thornton, CO (XF)
43355 - Las Cruces, NM (XF)
53356 - Boulder, CO (XF)
63357 - Centennial, CO (XF)
73358 - Denver, CO (XF)
83359 - Loveland, CO (XF)
93360 - Arvada, CO (XF)
103361 - Longmont, CO (XF)
113362 - Pueblo, CO (XF)
123363 - Fort Collins, CO (XF)
133364 - Barnes Marketplace - Colorado Springs, CO (XF)
143365 - Gardens on Havana - Aurora, CO (XF)
153367 - Animas Valley Mall - Farmington, NM (XF)
163368 - Prairie Center - Brighton, CO (XF)
173369 - Plaza Santa Fe - Santa Fe, NM (XF)
183370 - Promenade at Castle Rock - Castle Rock, CO (XF)
193371 - Crown Point - Parker, CO (XF)
203372 - The Shops at NorthCreek - Denver, CO (XF)
213373 - Orchard Town Center - Westminster, CO (XF)
223374 -Shops at Walnut Creek -Westminster, CO (XF)
233403 - Park City, UT
243453 - Orem, UT (XF)
253454 - Tucson - River, AZ (XF)
263455 - Draper, UT (XF)
273456 - Layton2, UT (XF)
283457 - Salt Lake City, UT (XF)
293458 - Academy Square - Logan, UT (XF)
303459 - Arizona Pavilions - Tucson, AZ (XF)
313460 - Jordan Landing - West Jordan, UT (XF)
323461 - Fashion Plaza - Murray, UT (XF)
333463 - Summit Place - Silverthorne, CO (XF)
343464 - Glenwood Meadows - Glenwood Springs, CO (XF)
3559000 - Southwest Plaza - Littleton, CO (XF)
3659001 - Applewood Village - Wheat Ridge, CO (XF)
3759002 - Greeley - Greeley, CO (XF)
3859003 - Northfield Stapleton - Denver, CO (XF)
3959008 - Southglenn/Cherry Hills - Greenwood Village, CO (XF)
4059009 - South Aurora - Aurora, CO (XF)
4159011 - River Point at Sheridan - Sheridan, CO (XF)
4259031 - Hunter's Crossing - American Fork, UT (XF)
4359032 - Sugarhouse - Salt Lake City, UT (XF)
4459033 -Mountain View Village - Riverton, UT (XF)
4559034 - Highbury Centre - West Valley City, UT (XF)
4659038 - Diamond Plaza - Ogden, UT (XF)
4759046 - Broadmoor Towne Center - Colorado Springs, CO (XF)
4859055 - Albuquerque, NM (Uptown)
4959056 - Albuquerque, NM (Cottonwood) (BP)
重复数据检测与名称变体识别方案

1. 精确重复检测

用Pandas内置方法可以更高效地检测精确重复:

import pandas as pd

# 假设数据已加载到df中
# 找出所有重复行(keep=False显示所有重复项,默认只显示除第一个外的重复项)
duplicate_rows = df[df.duplicated(subset='store_name', keep=False)]
print("精确重复的门店名称:")
print(duplicate_rows)

# 提取唯一值并排序(替代sqldf的实现)
unique_df = df.drop_duplicates(subset='store_name').sort_values('store_name')
print("去重后的门店列表:")
print(unique_df)

2. 名称变体检测(优化版模糊匹配)

针对Fuzzy工具效果不佳的问题,先做文本标准化再匹配,能大幅提升准确率:

步骤1:文本标准化

统一格式,去除干扰信息:

import re

def standardize_name(name):
    # 转小写统一格式
    name = name.lower()
    # 去除多余空格(首尾+中间多空格)
    name = re.sub(r'\s+', ' ', name).strip()
    # 移除括号及内部内容(如(XF)、(Uptown))
    name = re.sub(r'\(.*?\)', '', name).strip()
    # 移除数字前缀(如3351 - )
    name = re.sub(r'^\d+ - ', '', name).strip()
    return name

# 对门店名称应用标准化
df['standardized_name'] = df['store_name'].apply(standardize_name)

步骤2:模糊匹配识别变体

用fuzzywuzzy库结合标准化文本,设置相似度阈值筛选变体:

from fuzzywuzzy import fuzz
from itertools import combinations

# 提取标准化后的唯一名称
unique_std_names = df['standardized_name'].unique()

# 设置相似度阈值(值越高匹配越严格,可根据需求调整)
threshold = 80
variants = []

# 遍历所有名称对计算相似度
for name1, name2 in combinations(unique_std_names, 2):
    similarity = fuzz.ratio(name1, name2)
    if similarity >= threshold:
        variants.append((name1, name2, similarity))

# 输出检测到的变体
print("检测到的名称变体:")
for var in variants:
    print(f"{var[0]} 与 {var[1]} 相似度:{var[2]}%")

# 关联回原始门店名称
print("\n变体对应的原始名称:")
for std_name in unique_std_names:
    original_names = df[df['standardized_name'] == std_name]['store_name'].tolist()
    print(f"标准化名称:{std_name}")
    print(f"原始名称:{original_names}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:05:28