模糊字符串与agrep()匹配

时间:2017-12-18 10:29:57

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

我将公司名称列表与R和agrep()匹配,因为数据在遗留系统中存储错误 - No 4th normal form,公司记录在与客户相同的级别上,这意味着一个新的公司为每个新客户提供条目,这为一家公司带来了许多不同的公司名称 - 在很多情况下都可以正常运作。

有时,特别是对于短字符串,我得到 - 至少对我来说 - 奇怪的比赛,例如(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()的最大距离还是更好的方法之外,还有其他方法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

对于类似的问题,我使用了本文中描述的第二种方法: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“可能很有用。