我编写了一个脚本来对公司名称进行一些模糊匹配。我将一些并非总是完全正确的公司名称(即可能存在小的拼写错误或“inc.”后缀丢失)与“正确”公司名称和 ID 的语料库进行匹配。显然,关键是将 ID 正确附加到并非总是正确的公司名称上。
这是我正在匹配的数据集的一些非常简化的版本(我还没有使用 zip 部分,但稍后会回到它):
df <- data.frame(zip = c("4760","5445", "2200"), company = c("company x", "company y", "company z"))
corpus <- data.frame(zip = c("4760","5445", "2200", "2200", "2200"), company = c("company x inc.", "company y inc.", "company z inc.", "company a inc.", "company b inc."), id = c(12121212, 23232323, 34343434, 56565656, 67676767))
df
zip company
1 4760 company x
2 5445 company y
3 2200 company z
corpus
zip company id
1 4760 company x inc. 12121212
2 5445 company y inc. 23232323
3 2200 company z inc. 34343434
4 2200 company a inc. 56565656
5 2200 company b inc. 67676767
然后我使用以下代码创建字符串距离矩阵
library(stringdist)
distance.method <- c("jw")
string.dist.matrix <- stringdistmatrix(tolower(corpus$company),
tolower(df$company),
method = distance.method,
nthread = getOption("sd_num_thread"))
string.dist.matrix
[,1] [,2] [,3]
[1,] 0.1190476 0.1798942 0.1798942
[2,] 0.1798942 0.1190476 0.1798942
[3,] 0.1798942 0.1798942 0.1190476
[4,] 0.1798942 0.1798942 0.1798942
[5,] 0.1798942 0.1798942 0.1798942
然后我继续匹配最小距离对。通常,我想将 4000 家公司与 4,5 mio 的语料库进行匹配。公司,至少可以说需要一些计算能力。我的想法是,不是计算所有可能对之间的字符串距离,而是只为共享邮政编码的人计算它。正如我所看到的,与我在这里用简化数据说明的情况相比,对于更复杂的情况,结果将是更少的计算量和更高的模糊匹配精度。
简而言之,我想要的结果矩阵是这样的:
[,1] [,2] [,3]
[1,] 0.1190476 NA NA
[2,] NA 0.1190476 NA
[3,] NA NA 0.1190476
[4,] NA NA 0.1798942
[5,] NA NA 0.1798942
我似乎无法找到一种方法来做到这一点。有任何想法吗?