0

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

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

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

苹果 - 苹果 - 新鲜苹果 Cant aear

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

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

希望你有一些意见!

4

3 回答 3

0

您可能对 MySQL 的功能有一些运气SOUNDEX(),假设这些词足够相似并且可能足够简单。

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

基本上,它所做的是将给定的单词简化为表示它的四个字符串。对于任何两个听起来大致相同的单词,字符串应该相同。

于 2013-02-27T10:35:39.923 回答
0

虽然可以使用soundexLevenshtein distance,但它仍然需要在短语中找到关键词——“apple”和“apples”可能会起作用,但“dozen of fresh apples”可能不会。

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

  • 创建成分的基本列表(“面粉”、“苹果”、“火腿”)
  • 添加新配方时,将成分列表与列表匹配,可能允许使用 Levenshtein 或正则表达式进行一些模糊
  • 创建一个包含“原始”与“匹配”列表的后端页面,单击可能会标记错误的匹配项
  • 创建一个简单的界面来手动匹配不良命中
于 2013-02-27T10:41:19.183 回答
0

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

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

于 2013-02-27T10:41:27.290 回答