当前位置:  开发笔记 > 编程语言 > 正文

查找具有相似文本的文章的算法

如何解决《查找具有相似文本的文章的算法》经验,为你挑选了3个好方法。

我在数据库中有很多文章(标题,文字),我正在寻找一种算法来找到X最相似的文章,比如Stack Overflow的"相关问题",当你提出问题时.

我尝试谷歌搜索,但只找到关于其他"类似文本"问题的页面,比如将每篇文章与所有其他文章进行比较并在某处存储相似性.因此,我只是在我刚输入的文本上"实时"执行此操作.

怎么样?



1> Jay Kominek..:

编辑距离不是一个可能的候选者,因为它将依赖于拼写/单词顺序,并且考虑到您实际感兴趣的文档的大小和数量,使得您相信计算成本高得多.

像Lucene这样的东西是要走的路.您索引所有文档,然后当您想要查找与给定文档类似的文档时,将您的给定文档转换为查询,并搜索索引.在内部,Lucene将使用tf-idf和倒排索引使整个过程花费的时间与可能匹配的文档数量成比例,而不是集合中的文档总数.



2> Will..:

这取决于你对类似的定义.

该编辑距离算法是(拉丁语)词典建议的标准算法,并可以在整个文本工作.两种文本具有similiar如果他们有基本的相同顺序相同的话(EH字母).因此,以下两本书评论将非常相似:

1)"这是一本好书"

2)"这些不是很好的书"

(字母数去除,插入,删除或改变转动(2)代入(1)被称为"编辑距离".)

要实现此功能,您需要以编程方式访问每个审核.这也许并不像听起来那么昂贵,如果成本太高,你可以做comparisions作为后台任务,并存储在数据库领域本身正最similiar.

另一种方法是了解(拉丁语)语言的结构.如果您删除短(非元素化或引用)单词,并为常用或唯一的单词(或前缀)分配权重,则可以进行贝叶斯比较.以下两本书的评论可能会被复制,并且发现类似:

3)"法国革命是等等的战争与和平等等等等法国." - >法国/法国(2)革命(1)战争(1)和平(1)(请注意,字典已被用于结合法国和法国)

4)"这本书真的是法国菜的革命." - >法国(1)革命(1)

要实现这一点,您需要在评论创建/更新时识别"关键字",并查找类似评论在查询的where子句中使用这些关键字(理想情况下,如果数据库支持,则搜索"全文" ),可能会对结果集进行后处理,以便对找到的候选人进行评分.

书籍也有类别 - 在法国设置的惊悚片类似于法国的历史研究,等等?标题和文本之外的元数据可能有助于保持结果的相关性.



3> alex77..:

这个链接的教程听起来可能就是你所需要的.它易于遵循并且运行良好.

他的算法奖励了常见的子串和这些子串的共同排序,所以应该很好地选择相似的标题.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有