5

我正在尝试在 R 中进行一些模糊匹配,其中我有多个数据字段要匹配。

例如:

try_to_match <- c('seoul korea', 'bisbane', 'korea', 'australia brisbane')
locations <- data.frame(name=c('seoul', 'brisbane'),
                        country=c('south korea', 'australia'))

我想将用户输入的位置try_to_match与数据框相匹配locations

现在,关于 SO 上的 R 模糊匹配也有类似的问题,而且大部分都覆盖了agrep. 但是,当有多个单词要匹配时,我找不到任何涵盖模糊匹配的内容。

例如,如果我只匹配locations$name,我会得到“bisbane”到“brisbane”的匹配,正如我所期望的那样。此外,由于locations$name没有国家/地区,我没有得到包含国家/地区的各种搜索的匹配项。

sapply(try_to_match, agrep, locations$name, value=T)
# $`seoul korea`
# character(0)    
# $bisbane
# [1] "brisbane"    
# $korea
# character(0)
# $`australia brisbane`
# character(0)

所以,我想我也应该与国家匹配:

sapply(try_to_match, agrep, paste(locations$name, locations$country), value=T)
# $`seoul korea`
# character(0)    
# $bisbane
# [1] "brisbane australia"    
# $korea
# [1] "seoul south korea"    
# $`australia brisbane`
# character(0)

但是,由于缺少单词,我仍然无法将“seoul korea”与“seoul south korea”匹配。同样,虽然“brisbane australia”会正确匹配,但“australia brisbane”不会(因为单词的顺序颠倒了)。(“韩国”是否与“首尔韩国”匹配有点不确定,但我很高兴现在留下来)。

所以,我的问题是:当搜索匹配项可能有多个单词并且单独拼写错误并且单词的顺序可以不同时,如何进行模糊匹配?

有没有一个包可以为我做这种搜索?

(是的,我可以使用出色的 geonames Web 服务进行很多匹配,但我想避免向其服务器发出很多请求。我对在 R 中进行此类搜索的能力比对能力更感兴趣进行地理编码)。

4

0 回答 0