在MySQL数据库中搜索可能存在拼写错误的名称

时间:2011-05-31 04:08:08

标签: mysql sql

我目前正在编写一个脚本,其任务是查看数万行帐户信息并清除错误输入的地址,以及打印有关如何清理地址的报告。目前,不洁净地址的最大来源是错误的街道名称(令人惊讶的是,有多少种方法可以拼写街道名称)。在任何情况下,目前我的脚本都会抓取输入的街道名称并执行一系列特定于挪威语言的修改(v.变为vegengt.变为gata等。 )并在大约200万行的地址数据库中搜索街道名称。如果找不到匹配,则继续拆分街道名称的后半部分并用通配符替换它。它尝试了通配符搜索的不同变体。

无论如何,我的问题是:

MySQL是否包含任何可以让我更轻松的内容?我记得在MySQL中提到了一个“搜索”功能,它在一列中找到了匹配字符最多的单元格。在我的外卡搜索失败的情况下,它将是一个很棒的工具。

其他任何有助于找到错误地址匹配的内容都会很棒。

3 个答案:

答案 0 :(得分:2)

一种选择可能是尝试使用SOUNDEX让您接近您想要的。如果人们根据街道名称的语音拼写进行错误拼写,SOUNDEX会使发音与发音进行匹配,这样可能会让你更接近。

您也可以尝试Levenshtein距离算法。这可能与您正在寻找的内容更紧密相关。基本上它会看一个单词与另一个单词的接近程度。它可以用于拼写检查等,在地址字段中查找错误数据时可能很有用。这是一个链接:

http://www.merriampark.com/ld.htm

如果你想让函数在MySQL中使用Levenshtein距离算法,你可以在这里看一个例子:

http://www.artfulsoftware.com/infotree/queries.php#552

答案 1 :(得分:2)

您可能想要使用FULLTEXT索引和模糊MATCH ... AGAINST查询。请注意words shorter than 4 letters are excluded from the index by default

答案 2 :(得分:2)

这是一点点工作,但是:

  • 使用字段

    创建表格
    • num_appeared

  • 地址之间的数据透视表

    • ADDRESS_ID

    • word_id

遍历您的地址表,按字词拆分地址,然后在表中插入每个字,并在数据透视表中创建记录。完成后,按 num_appeared ASC对单词表进行排序,然后 - 您的单词最有可能被输入错误。然后,您可以创建一个脚本,在这些字词后搜索谷歌,谷歌制作的建议可能是该词的正确形式。