php - 根据字符串相似度获取最长公共(public)子串

标签 php mysql

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

  1. 家居装修指南
  2. 家居装修建议
  3. 家居装修费用
  4. 家庭园艺技巧

我希望结果是:

  1. 家居装修
  2. 家庭园艺技巧

基于对“Home”一词的搜索。

这可以通过 MySQL 或 PHP 或两者的组合来完成。我一直在努力解决这个问题,任何直接的帮助将不胜感激。谢谢。

编辑/问题已解决:

我认为稍微改变一下逻辑就可以更容易地解决这个问题。对于遇到此问题的其他人,这是我的解决方案。

  1. 获取sql结果
  2. 查找所搜索单词的第一次出现,一次一个字符串,并获取该字符串右侧的下一个单词。
  3. 结果将包括搜索到的单词与不同的相邻单词的连接。

不是一个很好的解决方案,但它适用于我的项目。感谢大家的帮助。

最佳答案

评论太长了。

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

Home Improvement
Home Improvement Advice on Kitchen Remodeling
Home Gardening

根据 Levenshtein 测量,第一和第三比第一和第三更接近。然而,我猜您希望第一个和第二个配对。

我知道你想要的算法。像这样的事情:

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

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

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

关于php - 根据字符串相似度获取最长公共(public)子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21367105/

相关文章:

php - Zend 无法通过代理连接到 HTTPS 服务器

php - 输入文本和特殊字符以及MySQL

MySQL - 获取 PARENTID 上父级 LEFT JOIN 的名称

mysql - 增加一行中的列值

php - Jquery循环通过json数组获取数据并用逗号分隔?

php - Mysql脚本创建列

php - Yii 从 CGridView 下载文件

mysql - 在MYSQL中创建 View

mysql - 如何在多个时间间隔内重复MySQL查询

Mysql,如果表1中添加了新记录,则触发自动在表2中添加新记录