【发布时间】:2019-12-31 08:01:39
【问题描述】:
我有一个地址列表。这些地址是由不同的用户输入的,因此写入相同地址的方式有很多差异。例如,
"andheri at weh pump house", "andheri pump house","andheri pump house(mt)","weh andheri pump house","weh andheri pump house et","weh, nr. pump house"
上面的向量有6个地址。而且几乎所有的都是一样的。我正在尝试找到这些地址之间的匹配项,以便我可以将它们组合在一起并重新编码。
我尝试过使用 agrep 和 stringdist 包。使用 agrep 我不确定我是否应该将每个地址作为一个模式并将其与其余地址匹配。从 stringdist 包中,我做了以下事情:
library(stringdist)
nsrpatt <- df$Address
x <- scan(what=character(), text = nsrpatt, sep=",")
x <- x[trimws(x)!= ""]
y <- ave(x, phonetic(x), FUN = function(.x) .x[1])
上面给了我错误:
In phonetic(x) : soundex encountered 111 non-printable ASCII or non-ASCII
characters.
不确定是否应该从字符向量中删除这些元素或将它们转换为其他格式。
我尝试使用 agrep:
for (i in 1:length(nsrpattn)) {
npat <- agrep(nsrpattn[i], df$address, max=1, v=T)
}
字符向量的长度在 25000 左右,这会继续运行并停止机器。
如何有效地为每个地址找到最接近的匹配项。
【问题讨论】:
标签: r pattern-matching stringdist agrep