在R中使用agrep()进行模糊匹配的替代方法

时间:2017-07-28 02:33:47

标签: r string-matching agrep

我有一个大型的管理数据文件,大约有100万条记录。在此数据集中可以多次表示个人。大约一半的记录都有识别代码,可以将记录映射到个人;对于没有的一半,我需要模糊匹配名称来标记可能属于同一个人的记录。

通过查看带有识别码的记录,我创建了一份记录同一个人姓名的差异列表:

  • 包含中间名,例如Jon Snow vs Jon Targaryen Snow
  • 包含第二个姓氏,例如Jon Snow vs Jon Targaryen-Snow
  • 昵称/缩短名字,例如Jonathon Snow vs Jon Snow
  • 撤消姓名,例如Jon Snow vs Snow Jon
  • 拼写错误/拼写错误/变体:例如Samual / Samuel,Monica / Monika,Rafael / Raphael

鉴于我所追求的匹配类型,是否有比使用agrep()/ levenshtein的距离更好的方法,这很容易在R中实现?

编辑:R中的agrep()在这个问题上没有做得很好 - 因为我需要考虑大量的插入和替换来解释名称记录的方式不同,很多错误的匹配被扔了。

1 个答案:

答案 0 :(得分:1)

我会多次通过。

"Jon .* Snow" - 中间名

"Jon .*Snow" - 姓氏第二名

昵称需要从长格式到短格式的字典,但没有正则表达式可以处理他的。

"Snow Jon" - 逆转(duh)

agrep将处理轻微的拼写错误。

您可能还想将您的名字标记为第一个,中间一个和最后一个。