【问题标题】:fuzzy string matching with agrep()模糊字符串匹配 agrep()
【发布时间】:2018-05-31 16:17:51
【问题描述】:

我正在将公司名称列表与 R 和 agrep() 进行匹配,因为数据在遗留系统中存储错误 - 没有第 4 范式,公司与客户记录在同一级别,这意味着一个新的每个新客户的公司条目,这导致一个公司有很多不同的公司名称 - 这在很多情况下都很好用。

有时,尤其是对于短字符串,我得到 - 至少对我来说 - 奇怪的匹配,例如(ABC 是第一个公司名称):

ABC ABAXIS Europe GmbH

ABC ABB Europe

ABC ABB Group

ABC ABB Stotz Kontakt GmbH

ABC ABM Financial News

ABC ABN AMRO Bank NV

ABC AC Klöser GmbH

ABC ACCBank

ABC ACEA S.p.A.

我正在使用带有以下参数的agrep()

agrep(vector1, vector2, value = TRUE, ignore.case = FALSE, max.distance = 0.01)

除了调整agrep() 的最大距离之外,还有其他方法或更好的方法吗?

提前致谢

【问题讨论】:

  • 你好,你能详细说明一下结果应该是什么吗?也许 StringR 包有帮助? StringR 你可以使用:max.distance = 0 , 1 , 2

标签: r string-matching fuzzy-search fuzzy agrep


【解决方案1】:

对于类似的问题,我使用了本文介绍的第二种方法:http://bigdata-doctor.com/fuzzy-string-matching-survival-skill-tackle-unstructured-information-r/#comment-942

它将每个寄存器与最相似的寄存器匹配,如果有一些误报对您来说是个问题,这当然不是最佳选择。

此外,您可能会发现此功能对删除名称前后的空格很有用:

  trim <- function (x) gsub("^\\s+|\\s+$", "", x) #Defining function that returns string w/o leading or trailing whitespace

我还使用了“tm”包中的 removewords() 函数。在您的情况下,删除 ABC " 可能很有用。

【讨论】:

  • 感谢您的回复。在匹配之前,我已经删除了空格/空格等。不幸的是,最相似的一个还不够,我需要一家公司的所有相似匹配来将这些行放在一起。删除 ABC 并不能解决我的问题,在这种情况下它是一个有效的公司名称,其他短公司名称也会出现问题(3-5 个字符)
猜你喜欢
  • 1970-01-01
  • 2012-02-14
  • 2014-11-02
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多