根据字符串相似性获取最长的公共子字符串

时间:2014-01-26 17:58:13

标签: php mysql

我有一个包含列名的表,其中包含以下名称:

  1. 家居装修指南
  2. 家居装修建议
  3. 家居装修费用
  4. 家庭园艺技巧
  5. 我希望结果是:

    1. 家居装修
    2. 家庭园艺技巧
    3. 基于搜索“Home”一词。

      这可以在MySQL或PHP中完成,也可以两者结合使用。我一直在试图弄清楚我的头发,任何直接的帮助将非常感激。感谢。

      编辑/问题有点解决:

      我认为通过稍微改变逻辑可以更容易地解决这个问题。对于有这个问题的其他人,这是我的解决方案。

      1. 获取sql结果
      2. 找到搜索到的单词的第一个匹配项,一次找到一个字符串,然后获取其右侧字符串中的下一个单词。
      3. 结果将包括与不同的相邻单词连接的搜索词。
      4. 不是一个好的解决方案,但它适用于我的项目。感谢大家的帮助。

1 个答案:

答案 0 :(得分:1)

评论太长了。

我不认为Levenshtein距离能达到你想要的效果。考虑:

Home Improvement
Home Improvement Advice on Kitchen Remodeling
Home Gardening

Levenshtein测量的第一个和第三个比第一个和第三个更接近。然而,我猜你想要第一个和第二个配对。

我对你想要的算法有所了解。像这样:

  • 将每个返回的字符串与每个其他字符串进行比较
  • 测量初始重叠的长度
  • 查找所有字符串字符串的最大值,将它们配对
  • 使用第二大重叠重复此过程,依此类推

痛苦,但并非不可能在SQL中实现。也许很痛苦。

这对我来说意味着您正在寻找产品之间的层次结构。我的建议是只包含一个类别列并返回该类别。您可能需要手动将类别插入数据中。