【问题标题】:Quick search for a similar text快速搜索相似文本
【发布时间】:2014-12-22 11:27:22
【问题描述】:

我支持一个公共博客,用户可以在该博客上发布他们的帖子。一些用户有超过一千种不同的文本,他们可能不记得他们已经发布了一些文本。我想帮助用户不要发布重复。

比较文本是否完全相等并不好 - 用户可能稍微更改了文本,或格式化,或从不同的程序复制等。所以我需要快速估计,如果现有数据库中有类似的文本。

我的技术栈包括 PHP、MySQL 和 Redis。如何使用这些或其他工具解决我的问题?

【问题讨论】:

    标签: php mysql text


    【解决方案1】:

    PHP 有一个名为similar_text 的函数,您可以使用它来计算匹配字符的数量或相似度的百分比。

    http://php.net/manual/en/function.similar-text.php

    然后您可以检查给定的文本是否在旧博客文章的一定范围内。

    如果您不想检查文本中的相似性,您可以尝试根据原始博客或博客主题的标签来标记帖子。然后向用户展示他们使用相似标签发布的帖子。

    【讨论】:

      【解决方案2】:

      您可以在全文索引列中使用 MySQL 的 ma​​tch - against

      举个例子:

      SELECT table.*, 
      MATCH(userText) AGAINST ('this is user input') AS relevancy 
      FROM table 
      ORDER BY relevancy DESC;
      

      因此,这将为您提供按相关性排序的结果。

      不要忘记在 userText 列上添加全文索引。

      【讨论】:

      • 将需要 MyISAM 镜像表,因为我目前对所有表都使用 InnoDB 引擎。
      • 从 MySQL 5.6.4 开始,提供对 InnoDB 的全文支持。但是对于旧版本,您是对的,只有 MyISAM 可用。
      猜你喜欢
      • 2011-08-31
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 2012-03-17
      • 2011-07-30
      • 1970-01-01
      相关资源
      最近更新 更多