在mysql中检查大致相等字符串的脚本

时间:2013-02-27 10:34:05

标签: php mysql

我正在开发一个系统,用户可以使用相应的成分创建自己的个人配方并保存(在mysql中)。

问题在于,每次保存一种成分时,我都会检查成分表中是否已经存在,我会比较成分的名称。

如果我能够从食谱中制作正确的购物清单,我想确保例如:

苹果 - 苹果 - 新鲜苹果 Cant apear

因此,如果首先创建“apple”并且我试图保存“苹果”,我想检查类似的东西已经存在。

像我试图解释的那样的算法是否存在?

希望你有一些意见!

3 个答案:

答案 0 :(得分:0)

你可能对MySQL的SOUNDEX()函数有一些运气,假设这些单词足够相似,而且可能很简单。

可以在此处找到文档:https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

基本上,它的作用是将给定的单词减少为表示它的四个字符的字符串。对于声音大致相同的任何两个单词,字符串应相同。

答案 1 :(得分:0)

虽然可以使用soundexLevenshtein distance,但仍然需要在短语中找到关键字 - 使用'apple'和'apples'可能会有效,但使用'打新鲜的苹果' - 可能不是。

根据我的经验,在该应用程序中没有什么比手动算法更好:

  • 创建成分的基本列表(“面粉”,“苹果”,“火腿”)
  • 添加新配方时,将成分列表与列表匹配,可能允许使用Levenshtein或regexes进行模糊处理
  • 创建一个后端页面,其中包含“原始”与“匹配”的列表,可能只需单击即可标记错误匹配
  • 创建一个简单的界面,为不良命中做手动匹配

答案 2 :(得分:0)

在mySql中,您可以使用SOUNDEX()函数soundex

如果你想在php中实现它,有levenshteinsimilar_text函数