【问题标题】:Fuzzy merging in large dataset大型数据集中的模糊合并
【发布时间】:2020-06-14 10:41:14
【问题描述】:

我有一个大型数据集 (300k),并且有一个我想要清理的特定列 - 名称列。 问题是由于人为输入错误,同一个名字可能有多个无意拼写,例如“Benjamin”拼写为“Banjamin”。

我尝试了 openrefine,但 ngram 合并和键冲突都无法解决上述示例,而 Leveshtein 距离公式永远存在并冻结了我的计算机。我尝试了 Python,但fuzzywuzzy + for 循环再次需要永远并且似乎不可行。 R studio 似乎是一个不错的选择,但我不知道如何解决这个问题?我尝试了“refinr”包,但这与 openrefine 相同,无法处理“Benjamin”和“Banjamin”类型的拼写错误。仅当有重复的字母或单词之间有空格时才有效。

有人对我应该怎么做有什么建议吗?

谢谢

【问题讨论】:

  • 欢迎来到 SO!请花一些时间阅读如何ask good question。我认为谷歌搜索“R 中的模糊连接”之类的内容应该会给你很多选择。您可能会发现 fuzzyjoin 包特别有用。
  • 您有无意/错误拼写的列表吗? TMM,标题应该是“模糊匹配”
  • 您可能正在寻找类似stringdist 的包,它具有近似字符串匹配和距离的功能。但是鉴于您的问题非常广泛,要给您一个准确的答案并不容易。我们所能做的就是给你一些方向,但你必须自己弄清楚细节。

标签: r data-cleaning fuzzy


【解决方案1】:

我认为fuzzyjoin-package 将满足您的需求。

df1 <- data.frame( name = c("James", "Benjamin", "Bert"), id = 1:3 )
df2 <- data.frame( name = c("Banjamin", "David", "Jemes"), id = 4:6 )


library( fuzzyjoin )
stringdist_join( df1, df2, by = "name")

#     name.x id.x   name.y id.y
# 1    James    1    Jemes    6
# 2 Benjamin    2 Banjamin    4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2021-05-16
    • 2018-11-30
    • 1970-01-01
    • 2017-08-08
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多