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

如何生成相似姓名映射表?解决数据库同人物异名匹配问题

解决方案

核心思路是先按职业(occupation)和机构(organization)分组——同一人物的这两个字段完全一致,只需在同组内匹配相似姓名,同时排除自身匹配的情况。

实现步骤及代码

  1. 加载所需工具包:
library(dplyr)
library(stringdist)
library(tidyr)
  1. 对原始数据分组处理,计算组内姓名相似度并筛选有效匹配:
# 按机构和职业分组,生成组内所有姓名组合
name_matches <- df1 %>%
  group_by(organization, occupation) %>%
  expand(name1 = name, name2 = name) %>%
  # 排除自身匹配的行
  filter(name1 != name2) %>%
  # 计算姓名间的Jaro-Winkler距离(适合姓名匹配,阈值可调整)
  mutate(distance = stringdist(name1, name2, method = "jw")) %>%
  # 筛选距离小于阈值的匹配(示例用0.15,可根据实际数据调整)
  filter(distance < 0.15) %>%
  # 保留核心映射字段
  select(name1, name2) %>%
  ungroup()

# 查看最终映射表
name_matches

结果说明

运行代码后会得到如下映射结果:

# A tibble: 2 × 2
  name1           name2               
  <chr>           <chr>               
1 Anne Sue Frank  Anne S. Frank       
2 John S. Gooble  Johnatan Sue Google

你可以根据实际数据调整stringdist的距离计算方法(比如lv代表莱文斯坦编辑距离)和阈值,提升匹配准确性。如果需要避免双向重复(比如同时出现name1=A,name2=B和name1=B,name2=A),可在filter(name1 != name2)后添加filter(name1 < name2)去重。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:52:36