一、Hash Table和Search Tree

实现dictionary的方法主要有哈希表搜索树(二叉树、B树、AVL树);

实现哈希表的dictionary的优点:

(1)查询效率O(1);

缺点:

(1)哈希冲突。

(2)不支持模糊查询。

(3)哈希函数需要不断变化以适应需求。

实现搜索树的dictionary的优点:

(1)支持模糊查询。

缺点:

(1)查询效率相对较慢。

(2)树要保持平衡。

二、单个通配符查询

1.尾通配符查询

比如abc*,即通配符出现在尾部的查询就是尾通配符查询,这种查询使用搜索树可以完成,方法就是以a,b,c的顺序遍历树。如下图所示:

如果要查询ab*,则

(1)比较根节点:因为a在a-m中,所以往左走。

(2)因为ab在a-hu之间,因此往左走。

(3)剩下的子节点就是满足要求的结果,遍历并取得他们的posting即可。

2.头通配符查询

如果要进行头通配符查询,则需要引入反向B tree的概念。反向B tree是把B tree查询的顺序反过来。比如要查询*cba,则查询顺序为a,b,c,举例:

查询*ba的步骤:

(1)比较根节点,因为a在a-m之间,则往左走。

(2)因为ba在aa-uh之间,因此往左走。

因此下面的子节点就是满足条件的结果。

3.一般通配符查询

比如abc*cba,只需要分解成abc*和*cba,并分别运用1,2的知识即可。但要注意查询出的结果必须在abc*cba中过滤一遍。因为比如abcba满足abc*和*cba,但是却不满足abc*cba;

三、专用于通配符查询的索引结构

1.permuterm index

方法:$表示一个词的末尾(正则),即如果ab,则表示成ab$,并进行轮排,形成ab$,$ab,b$a,并指向ab;

在处理单个通配符查询时,如果要查*b,则先添上$,然后旋转,使得*在词的尾端,即b$*,并在搜索树中查找。发现b$a满足要求,则ab满足要求。

在处理多个通配符查询时,如果要查询a*b*,则先添加$即a*b*$,然后旋转为$a*b*,先查询$a*,取得的结果再通过a*b*过滤即可。

缺点:词典会变得很大。

2.K-GRAM index

K-GRAM的定义:k个连续的字母的组合,在第二十章中会讲到k-shingle,意思是k个连续单词的组合。

比如:hello的3-gram是:hel,ell,llo;

索引结构:

k-gram index的dictionary是所有词的k-gram的集合。

k-gram index的posting是匹配k-gram的单词序列。

索引规则:

在建索引之前必须在单词首尾添加$;再进行k-gram indexing;

查询方法:

举例:查找com*;利用3-gram 索引

(0)添加$,即$com*$; 如果是2-gram,则是$c , co , om

(1)先通过3-gram index进行查找匹配的单词;

(2)因为3-gram index查找出的结果并不精确(比如coordcom,匹配$co,com,却不能匹配$com*),因此需要在$com*进行过滤,才能得出结果。

总结:k-gram索引的速度非常慢;因为需要先对k-gram索引取得单词(原本的单层索引变成了两层索引),再进行一次过滤,才能进入普通的倒排索引中查找docID;

而轮排索引不需要后过滤,但是空间消耗很大;

四、拼音校验方法

主要原则:先找邻近度大的词,如果邻近度相同,则找常用词;

1.编辑距离

通过动态规划的方法,把两个单词看成二维矩阵,进行计算。

比如PARIS 和 ALICE

注意:编辑距离有个缺点,就是如果要让查询和每个term计算编辑距离,则效率太差,因为在倒排索引的dictionary中有几千万个term;

2.利用k-gram计算Jaccard系数

Jaccard系数:给定集合A和B,J=(AB)/(A+B-AB);

假设A和B是两个单词,长度为m和n,因此A和B分别有m-1个和n-1个k-gram;

给定一个查询Q,计算出Q所对应的k-gram后,即可对k-gram索引遍历,对每个单词和Q计算Jaccard系数,AB可以理解为有多少个k-gram重叠,而A+B-AB可以理解为合并后一共有多少k-gram(通过A和B的k-gram长度和 减去AB的k-gram overlap的数量),并取得Jaccard系数高出阈值的单词。

总结:可以先进行k-gram索引,然后再进行编辑距离的计算。

当然以上只是适用于单独单词的拼写错误,如果类似于I are happy.这种查询,就检测不出错误,因为单独的单词都是对的。

检测方法:当进行查询后返回的结果很少,则对查询词组有所怀疑,则会对每个单词进行替换,使得找出返回结果多的词组。

3.语音校验

通过把发音类似的单词放在同一个组(通过语音哈希函数),称为soundex算法。

转载于:https://www.cnblogs.com/xiazdong/archive/2012/01/06/3058357.html

《信息检索导论》第三章总结相关推荐

  1. 软件工程导论第三章复习总结附思维导图

    软件工程导论第三章复习总结附思维导图 概述 准确回答"系统必须做什么" 必须理解并描述问题的信息域,根据这条准则应该建立数据模型 必须定义软件应该完成的功能,这条准则要求建立功能模 ...

  2. 信息技术导论 第三章 移动互联网技术 笔记

    第三章   移动互联网技术 3.1 移动互联网概述 3.1.1   移动互联网的基本概念 移动互联网是PC互联网发展的必然产物,将移动通信和互联网二者结合起来,成为一体.它是互联网的技术.平台.商业模 ...

  3. 【算法基础】数据结构导论第三章-栈、队列和数组.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 本文参考百度文库的多篇文章. 如需下载ppt文件,请回复"sjjg3" ...

  4. 中国大学MOOC 人工智能导论第三章测试

    1 单选(2.5分) 以下关于正向推理的说法正确的是 得分/总分 A. 正向推理以某个假设目标作为出发点 B. "如果P->Q为真,但Q不成立,则P也不成立"是假言推理 C. ...

  5. 工程电磁场导论第三章总结

    写在前面:先向大家提一下旋度和散度的概念: 再提一下高斯散度定理和斯托克斯散度定理: 高斯散度定理: 斯托克斯公式: 目录

  6. 【算法基础】数据结构导论第七章-排序.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 数据结构导论第五章-图 数据结构 ...

  7. 【算法基础】数据结构导论第六章-查找.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 数据结构导论第五章-图 本文参考 ...

  8. 【算法基础】数据结构导论第五章-图.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 数据结构导论第四章-树 本文参考百度文库的多篇文章. 如 ...

  9. 【算法基础】数据结构导论第四章-树.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 本文参考百度文库的多篇文章. 如需下载ppt文件,请在本 ...

  10. 《算法导论》学习总结 — 2.第一章 第二章 第三章

    上一篇:http://www.cnblogs.com/tanky_woo/archive/2011/04/09/2010263.html 前三章基本没什么内容,所以合在一起总结. 第一章: 讲了算法( ...

最新文章

  1. 搭建B2B2C多用户商城系统需要注意的事项
  2. 交叉科学部如何建?基金委:要做好这4点
  3. php 昨天开始时间_php日期处理显示:昨天、今天、本周、上一月等时间结点数据...
  4. Kafka无消息丢失配置
  5. WHEN OVERSEAS
  6. 牛逼站是怎样炼成的?-推荐系统篇
  7. B12-UIAlertController(NS_CLASS_AVAILABLE_IOS(8_0))。
  8. mysql 权重 取值_mysql如何按权重查询数据啊?
  9. android纹理存储,Android:OpenGL存储纹理多长时间?
  10. 两款网站页面翻译插件
  11. 若依框架前端问题总结
  12. stm32f4c语言编程,如何使用STM32F4的DSP库
  13. k8s系列03-kubeadm部署calico网络的k8s集群
  14. 我的梦想是成为一名计算机程序员英语怎么说,I dream of becoming a programmer in the future 我梦想将来当一名程序员...
  15. Simotion应用与组网之一安装篇
  16. 湖南大学计算机专业推免生,湖南大学2018年招收推荐免试攻读研究生简章
  17. 支付宝服务商模式支付
  18. BUG之母——美国海军首位女少将传奇
  19. python如何提取数据中的年月_Python数据处理笔记——Pandas时间数据提取处理
  20. one-hot编码例子介绍

热门文章

  1. 浅析企业网站软文效果是如何展现的?
  2. 计算机课程成绩表排名怎么算,微机原课程设计学生成绩名次表设计.doc
  3. vue 判断是否位 float_VUE中条件注释法css,判断ie浏览器
  4. jfinal怎么连接oracle,如何用Jfinal连接多个数据库
  5. 空指针 java调用_java-变量引用与重复性get调用以避免空指针
  6. python实验室怎么样_Python 有什么不为人知的坑?
  7. Golang开发环境搭建-Vim篇
  8. php json_decode \ 反斜杠 转义 问题
  9. JS中有两种自加法操作
  10. 配置ANDROID_HOME