我目前正在编写一个脚本,任务是查看数以万计的帐户信息,清理错误的地址,以及打印关于地址如何被清除的报告。目前,最大的不洁地址来源是错误的街道名称(令人惊讶的是,你能拼写一个街道名称的方式有多少种)。无论如何,目前我的脚本获取输入街道名,并执行一系列针对挪威语言的编辑(v.变成vegen,gt.变成gata等等)。并在大约200万行地址数据库中搜索街道名称。如果找不到匹配,它就会将街道名称的后半部分分割开来,用通配符替换它。它尝试了通配符搜索的不同变体。
总之,我的问题是:
MySQL是否包括任何能让我更轻松的东西?我记得在MySQL中提到了一个“搜索”函数,它可以在列中找到最匹配的字符或什么的单元格。在我的外卡搜索失败的情况下,这将是一个很好的工具。
任何有助于查找与错误地址匹配的内容都将是很棒的。
发布于 2011-05-31 04:11:40
一个选择可能是尝试使用SOUNDEX让你接近你想要的东西。SOUNDEX将使匹配的发音,所以它可能会让你更近,如果人们是错误的根据拼音拼法的街道名称。
您还可以尝试Levenshtein距离算法。这可能与你正在寻找的东西有着更紧密的联系。基本上看一个词离另一个单词有多近。它可以用于拼写检查等,并且在查找地址字段中的不良数据时可能很有用。这里有一个链接:
http://www.merriampark.com/ld.htm
如果您希望函数在MySQL中使用Levenshtein距离算法,您可以在这里查看一个示例:
http://www.artfulsoftware.com/infotree/queries.php#552
发布于 2011-05-31 04:12:28
您可能需要使用FULLTEXT索引和模糊MATCH ... AGAINST查询。请记住,默认情况下,索引中不包含小于4个字母的单词。。
发布于 2011-05-31 04:22:30
这是更多的工作,但是:
- word
- num\_appeared
- address\_id
- word\_id
遍历 address 表,将地址按单词拆分,然后在 word 表中插入每个单词,并在pivot表中创建记录。当你做完,排序的单词表由num_appeared ASC和那里-你有最大的机会被错误键入的单词。然后,您可以创建一个脚本,在这些单词之后搜索google,而google提出的建议可能是该单词的正确形式。
https://stackoverflow.com/questions/6182915
复制相似问题