【发布时间】:2014-12-22 11:27:22
【问题描述】:
我支持一个公共博客,用户可以在该博客上发布他们的帖子。一些用户有超过一千种不同的文本,他们可能不记得他们已经发布了一些文本。我想帮助用户不要发布重复。
比较文本是否完全相等并不好 - 用户可能稍微更改了文本,或格式化,或从不同的程序复制等。所以我需要快速估计,如果现有数据库中有类似的文本。
我的技术栈包括 PHP、MySQL 和 Redis。如何使用这些或其他工具解决我的问题?
【问题讨论】:
我支持一个公共博客,用户可以在该博客上发布他们的帖子。一些用户有超过一千种不同的文本,他们可能不记得他们已经发布了一些文本。我想帮助用户不要发布重复。
比较文本是否完全相等并不好 - 用户可能稍微更改了文本,或格式化,或从不同的程序复制等。所以我需要快速估计,如果现有数据库中有类似的文本。
我的技术栈包括 PHP、MySQL 和 Redis。如何使用这些或其他工具解决我的问题?
【问题讨论】:
PHP 有一个名为similar_text 的函数,您可以使用它来计算匹配字符的数量或相似度的百分比。
http://php.net/manual/en/function.similar-text.php
然后您可以检查给定的文本是否在旧博客文章的一定范围内。
如果您不想检查文本中的相似性,您可以尝试根据原始博客或博客主题的标签来标记帖子。然后向用户展示他们使用相似标签发布的帖子。
【讨论】:
您可以在全文索引列中使用 MySQL 的 match - against。
举个例子:
SELECT table.*,
MATCH(userText) AGAINST ('this is user input') AS relevancy
FROM table
ORDER BY relevancy DESC;
因此,这将为您提供按相关性排序的结果。
不要忘记在 userText 列上添加全文索引。
【讨论】: