全文检索的背后

项目准备

  • 数据准备 依旧用到几篇喜欢的现代诗
  • 分词工具 大名鼎鼎的jieba分词
  • 语言 python3.6
  • 需要资料的可以点击【资料领取】

分词统计

关于结巴分词不同 API的详细介绍(来自jieba官网)

  • jieba.cut 方法接受四个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型;use_paddle 参数用来控制是否使用paddle模式下的分词模式,paddle模式采用延迟加载方式,通过enable_paddle接口安装paddlepaddle-tiny,并且import相关代码;
  • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  • 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
  • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用
  • jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

全文检索的背后_第1张图片

倒排索引

也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。

举个例子 来自 Elastic 倒排索引

1. The quick brown fox jumped over the lazy dog
2. Quick brown foxes leap over lazy dogs in summer
复制代码

所以分词处理后的倒排索引为

Term Doc_1 Doc_2
Quick   X
The X  
brown X X
dog X  
dogs   X
fox X  
foxes   X
in   X
jumped X  
lazy X X
leap   X
over X X
quick X  
summer   X
the X  

这样的好处就是可以通过关键词搜索对应的文章

完整的例子

全文检索的背后_第2张图片

下面为python实现的完整的demo,主要步骤如下

  1. 分词建立索引
  2. 查找文档
  3. 文档评分 (这里只用单词的频次代替)


全文检索的背后_第3张图片

全文检索的背后_第4张图片

你可能感兴趣的:(python,node.js,php,爬虫,后端)