我有一个包含 500 万个不同公司名称的数据框,其中许多是指以不同方式拼写或拼写错误的同一家公司。我在这里以公司名称“Amminex”为例,然后尝试将其字符串化为 500 万个公司名称:
Companylist <- data.frame(Companies=c('AMMINEX'))
这是我打开的公司名称的大列表:
Biglist <- data.frame(name=c(Biglist[,]))
我将 AMMINEX 和 500 万家公司放在一个矩阵中:
Matches <- expand.grid(Companylist$Companies,Biglist$name.Companiesnames)
更改列名:
names(Matches) <- c("Companies","CompaniesList")
我将 stringdist 与 cosine 方法一起使用:
Matches$dist <- stringdist(Matches$Companies,Matches$CompaniesList, method="cosine")
我删除了所有大于 0.2 的距离以消除不良匹配:
Matches_trimmed <- Matches[!(Matches$dist>0.2),]
我按距离列排序,因此最佳匹配出现在顶部:
Matches_trimmed <- Matches_trimmed[with(Matches_trimmed, order(dist)), ]
第一行很好,但随后出现了一堆糟糕的匹配,最后在底部我得到了很好的匹配“AMMINEX AS”。
这对我来说真的行不通。有什么方法可以改善这种模糊匹配,或者使用不同的方法来获得更好的结果?也许一种方法可以查看字母在字符串中出现的顺序?