text-mining – 如何做邮政地址模糊匹配?

我想知道如何匹配邮政地址,当他们的格式不同或其中一个拼写错误.

到目前为止,我已经找到了不同的解决方案,但我认为它们很老,而且效率不高.我确信存在一些更好的方法,所以如果你有参考资料供我阅读,我相信这是一个可能让一些人感兴趣的主题.

我找到的解决方案(例子在R中):

> Levenshtein距离,等于您必须插入,删除或更改以将一个单词转换为另一个单词的字符数.

agrep(“acusait”,c(“accusait”,“abusait”),max = 2,value = TRUE)
## [1]“accusait”“abusait”
>音素的比较

库(RecordLinkage)
同音(X LT; -c( ‘accusait’, ‘acusait’, ‘abusait’))
## [1]“A223”“A223”“A123”
>使用拼写校正器(eventually a bayesian one like Peter Norvig’s),但我觉得地址效率不高.
>我想使用谷歌建议的建议,但同样,它在个人邮政地址上效率不高.
>您可以想象使用机器学习监督方法,但您需要存储用户的错误请求,这对我来说不是一个选项.

最佳答案 我认为这是一个拼写纠正问题,你需要在某种词典中找到最接近的匹配词.

我所说的“近”是Levenshtein距离,除了最小数量的单字符插入,删除和替换限制太多.

其他类型的“拼写错误”也是可能的,例如转置两个字符.

我已经做了几次,但不是最近.
最近的病例与临床试验的伴随药物有关.
你会惊奇地发现拼错“acetylsalicylic”有多少种方法.

Here is an outline in C++ of how it is done.

简而言之,字典存储为trie,并且您会看到一个可能拼写错误的单词,您尝试在该单词中查找.
在搜索时,您可以按原样尝试单词,并尝试在每个点上对单词进行所有可能的更改.
当你去的时候,你有一个整数预算,你可以容忍你可以容忍的改变,你每次进行改动都会减少.
如果您用尽预算,则不允许进一步更改.

现在有一个顶级循环,您可以在其中调用搜索.
在第一次迭代中,您以预算0调用它.
当预算为0时,它将不允许任何更改,因此它只是直接查找.
如果找不到预算为0的单词,则以预算1再次调用它,这样就可以进行一次更改.
如果失败,请尝试2的预算,依此类推.

我没有尝试过的是一个部分预算.
例如,假设一个典型的改变将预算减少2而不是1,预算变为0,2,4等.
然后一些改变可以被认为是“更便宜”.例如,元音替换可能只会将预算减少1,因此对于一个辅音替换的成本,您可以进行两次元音替换.

如果单词没有拼写错误,则所需的时间与单词中的字母数成正比.
通常,所需的时间是单词中改变次数的指数.

如果你在R中工作(就像我在上面的例子中那样),我会让它调用C程序,因为你需要为此编译语言的速度.

点赞