目录

  • 概述
  • 1、搜索推荐
    • 1.1 编辑距离
  • 2、相关推荐
    • 2.1 文档指纹(Simhash算法)
    • 2.2 文档相似度(海明距离)
    • 2.3 海量文档处理技巧
  • 3、基于全文检索系统实现文档系统推荐
    • 3.1 文档标题的搜索推荐
    • 3.2 文档内容的相关推荐

概述

当我们查看一些文档资料是,会选择相应的文库查询资料,比如百度文库,在我们预览文档内容是,网页还会提供相关的推荐功能,比如:搜索推荐、相关文档等,如下图百度文库的推荐功能:


搜索推荐基于浏览的文档标题给出相似标题的推荐,而相关文档一般会找出相似文档内容的文档给出推荐,进而提升用户的使用体验。
那么,如何实现以上推荐功能,下文给出一种实现方案,如有不精准的地方,欢迎指正。

1、搜索推荐

搜索推荐一般是基于短文本(文档标题)进行相似性推荐,目前业界常用的短文本推荐方法是基于文本编辑距离实现,以下给出编辑距离的基本概念。

1.1 编辑距离

编辑距离(Levenshtein Distance),是针对二个字符串(例如英文字)的差异程度的量化量测,是 用来度量两个序列相似程度的指标。编辑距离指的是在两个字符串之间,由一个字符串转换为另一个字符串所需要的最少单字符编辑操作。
单字符编辑操作定义为:

  • 插入(Insertion)
  • 删除(Deletion)
  • 替换(Substitution)

例如,“kitten” 和 “sitting” 这两个字符串,由 “kitten” 转换为 “sitting” 需要的最少单字符编辑操作有:
1.kitten → sitten (substitution of “s” for “k”)
2.sitten → sittin (substitution of “i” for “e”)
3.sittin → sitting (insertion of “g” at the end)
即二者之间的编辑距离为 3 。

2、相关推荐

2.1 文档指纹(Simhash算法)

SimHash是一种局部敏感hash(即Locality Sensitive Hashing),是Google在2007年发表的论文中提到的一种指纹生成算法,被应用在Google搜索引擎网页去重的工作之中。SimHash算法主要的工作就是将文本进行降维,生成一个SimHash值,也就是论文中所提及的“指纹”,通过对不同文本的SimHash值进而比较海明距离,从而判断两个文本的相似度。
SimHash算法主要有五个过程:分词、Hash、加权、合并、降维。通过下图来描述SimHash算法的整个过程:

  • 分词:把文本分词形成这个文章的特征单词,并为每个词加上权重, 在此,基于分词后进行关联词抽取,词条权重是关键词的TF-IDF值;
  • Hash:通过合适的hash函数算法把每个词变成相应的hash值;
  • 加权: 通过Hash步骤的hash生成结果,需要按照单词的权重形成加权数字串;
  • 合并: 把上面各个单词算出来的序列值累加,变成只有一个序列串;
  • 降维:把上一步算出来的 序列串变成 0 1 串,形成我们最终的simhash签名。

2.2 文档相似度(海明距离)

对于文本去重这个问题,常见的解决办法有余弦算法、欧式距离、Jaccard相似度、最长公共子串等方法。但是这些方法并不能对海量数据高效的处理。

2.3 海量文档处理技巧

基于文档指纹和海明距离即可计算出两个文档的相似度,给定一个文档,在文档库中找到和该文档内容相似推荐转化为找出和该文档指纹的海明距离较小的文档集合。
那么,问题是如何基于文档指纹的海明距离从海量文档库中快速找到相似推荐文档,在此,根据抽屉原理,对文档指纹做以下处理:

3、基于全文检索系统实现文档系统推荐

3.1 文档标题的搜索推荐

文档构建时线下遍历每一个文档基于编辑距离计算文档相似文档集合,写入文档索引字段,线上输入文档标题,检索上文存储的字段给出推荐:

编辑距离
存入字段
文档索引
相似文档集合
线上搜索
输入文档标题
推荐结果

3.2 文档内容的相关推荐

文档构建时计算文档指纹,写入文档索引字段,线上输入文档标题,检索文档对应的文档指纹,基于文档指纹构建查询表达式,线上检索相似文档给出推荐:

SimHash算法
存入字段
精确查询
组合查询
文档索引
文档指纹
检索文档指纹
线上检索
输入文档标题
基构建查询表达式
推荐结果

基于全文检索系统实现文档系统相关推荐功能相关推荐

  1. 推荐一个基于Python开源的文档系统

    今天给大家推荐一个基于Python开发的在线开源文档系统. 项目简介 在日常开发中,每个项目都需要编写大量的文档.文档放在网络上,涉及一些公司.个人机密就不适合放在互联网上面.这个系统就刚好可以满足我 ...

  2. 基于Jfinal-Engine实现 word 文档的渲染导出功能,通过xml渲染后再转word

    大体思路: 1.使用Word制作出xml模板 2.然后使用JFinal的模板引擎渲染数据 3.拿到渲染后的xml,包装成word二进制数据 发送给前端下载保存即可 思路来源:https://jfina ...

  3. 95. 基于Notes/Domino的文档工作流系统(七)

    本文继续剖析基于Notes/Domino的文档工作流系统的设计和代码,以方便用户能应用和创建自己的工作流.(CSDN的下载资源一旦上传就不能修改,很不方便,现已将下载地址改到GitHub,若发现下载有 ...

  4. (附源码)springboot基于WEB的高校文档打印系统 毕业设计101004

    Springboot 高校文档打印系统 摘要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以 ...

  5. django开源电子文档管理系统_基于 Python 开发的在线文档系统

    MarkDown 编辑,快速书写:类 Gitbook,简洁阅读:后台管理. 州的先生(zmister.com)自用并完全开源.基于 Python 编写的文档写作系统. MrDoc 拥有以下特点: 站点 ...

  6. 基于JAVA-超市会员积分管理系统-计算机毕业设计源码+系统+lw文档+部署

    基于JAVA-超市会员积分管理系统-计算机毕业设计源码+系统+lw文档+部署 技术栈 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui.HTML. ...

  7. 基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  8. 基于JAVA糖果销售管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA糖果销售管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA糖果销售管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: ...

最新文章

  1. 如何在Xcode 4中设置NSZombieEnabled?
  2. Linux文件系统之文件的读写
  3. WCF学习之旅—基于Fault Contract 的异常处理(十八)
  4. OSG+VS2010+win7环境搭建---OsgEarth编译
  5. Cpp 对象模型探索 / 单一继承的类的内存布局
  6. springboot-文件上传xls及POI操作Excel
  7. 解决xp登陆域很慢的方法
  8. C#窗体应用程序崩溃解决方法总结
  9. [转]Insert, Update, and Delete Destination table with SSIS
  10. 北风设计模式课程---享元模式与单例模式区别
  11. 图片呈现jQuery中fadeIn、fadeOut、fadeTo的用法(图片隐藏与显示)
  12. 这些将在新一年改变你的风控内容
  13. 租房新体验:AI机器人中介带你看房
  14. 【黑苹果教程】修复OS X 10.11+上HD4200/HD4400/HD4600/HD5600驱动
  15. 树莓派无法打开摄像头模块,无法识别摄像头
  16. Qt+OpenCV在arm板上运行实现思路
  17. ba2plus android,BAPlus金融计算器
  18. 伊利诺伊大学香槟分校计算机工程,伊利诺伊大学香槟分校计算机工程排名第8(2020年TFE美国排名)...
  19. 《工程伦理与学术道德》期末考试
  20. 开个水果店选址在哪,水果店选址的小窍门

热门文章

  1. 验证电子邮件格式是否正确
  2. 【问题解决】Ubuntu18.04 网络图标不见了,显示有线未托管
  3. 摄影投票比赛链接制作微信投票的小程序可多选网络投票工具
  4. 吃草莓时要注意“三不”
  5. 小程序vant-weapp-商品卡片列表
  6. 输出一个由*组成的三角形图案_我问遍整个设计院,居然没有一个人会画古建?...
  7. 【无标题】js基础之数组
  8. (资讯)历史——4 月 10 日:Github 诞生;人类第一张黑洞照片;计算机延误航天飞机
  9. 计算机三级和四级能一块考,计算机三级和四级可以一起考吗
  10. 为什么Facebook账号被封?如何应对Facebook账号被封?