2

我有一个dictionary包含单词列表的表格,例如:

   ID|word
   ---------
    1|hello
    2|google
    3|similar
    ...

所以我想如果有人写这样的文字

“helo iam 正在为 gogle 寻找类似的引擎”。

现在我想检查每个单词是否存在于数据库中,如果不存在,它应该让我得到该单词的相似单词。例如:helo = hello, simlar = similar, gogle = google。好吧,我想修正拼写错误。在我的数据库中,我有一本包含所有英语单词的完整词典。我找不到任何对我有帮助的 mysql 函数。LIKE对我的情况没有帮助。

4

3 回答 3

7

您可以使用soundex()函数进行语音比较

您的查询应该是这样的:

select * from table where soundex(word) like soundex('helo');

这将返回你的hello

于 2016-02-04T21:44:43.757 回答
3

有一个功能确实需要你想要的,但它很密集并且会减慢查询速度。你可能可以在你的情况下使用,我以前用过。它被称为 Levenshtein。你可以在这里得到它如何在 mysql 中添加 levenshtein 函数?

于 2016-02-04T21:39:05.917 回答
3

您想要做的称为模糊搜索。你可以在 MySQL 中使用 SOUNDEX 函数,记录在这里:

http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_soundex

您的查询看起来像:

SELECT * FROM dictionarywhere SOUNDEX( word) = SOUNDEX(:yourSearchTerm)

...您的搜索词绑定到 :yourSearchTerm 参数值。

下一步是尝试在 MySQL 中实现和使用 Levenshtein 函数。一个在这里描述:

http://www.artfulsoftware.com/infotree/qrytip.php?id=552

两个字符串之间的 Levenshtein 距离是将一个字符串转换为另一个字符串所需的最小操作数,其中一个操作可能是插入、删除或替换一个字符。

您还可以考虑查看针对全文搜索的数据库,例如 Elastic Search,它本机提供:

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html

于 2016-02-04T21:48:38.313 回答