ElasticSearch 2 (19) - 语言处理系列之故事开始
ElasticSearch 2 (19) - 语言处理系列之故事开始
摘要
全文搜索是精度(尽可能少的返回不相关文档)和召回(尽可能多的返回相关文档)的战场。尽管只精确匹配用户查询的词肯定会是精确的,但这并不够。我们可能会丢失许多被用户认为相关的文档,取而代之的是我们需要扩大撒网范围,去搜索那些与原始查询不完全相同但又相关的词。
版本
elasticsearch版本: elasticsearch-2.x
内容
全文搜索是精度(尽可能少的返回不相关文档)和召回(尽可能多的返回相关文档)的战场。尽管只精确匹配用户查询的词肯定会是精确的,但这并不够。我们可能会丢失许多被用户认为相关的文档,取而代之的是我们需要扩大撒网范围,去搜索那些与原始查询不完全相同但又相关的词。
难道我们不希望在搜索 “quick brown fox” 的时候,能匹配包含 “fast brown foxes” 的文档,搜索 “Johnny Walker” 可以匹配 “Johnnie Walker” ,搜索 “Arnolt Schwarzenneger” 可以匹配 “Arnold Schwarzenegger” ?
如果现存文档正好包含用户的查询,那么它们当然应该出现在结果集的顶部,而弱匹配的文档会随后出现。如果没有完全匹配的文档,我们至少可以为用户提供潜在匹配的可能,它们甚至可能是用户搜索的初衷。
以下有一些需要处理的事情:
移除如 ´、 ^ 和 ¨ 这样的变音符,那么搜索 rôle 会匹配 role ,反之亦然。参见 标记的规范化。
移除单复数形式间的差异( fox 与 foxes )或时态间的差异( jumping 与 jumped 与 jumps ),可以通过词干提取法获得每个单词的词根形式。参见 词根提取。
移除经常使用的普通词或停用词,如:the 、 and 和 or ,以提高搜索效率。参见 停用词:性能与精度。
包括同义词使查询 quick 也能与 fast 匹配,UK 能与 United Kingdom 匹配。参见 同义词。
检查拼写错误或可选拼写形式,或同音异形词的匹配,如:their 与 there,meat 与 meet 与 mete。参见 打字或拼写错误。
在我们处理单个词语之前,需要将文本拆分成多个单词,也就是说我们需要了解词语的组成。这个问题会在 单词识别 章节中解决。
不过首先,我们还是来看看如何快速简便的开始对我们的语言进行处理。
参考
elastic.co: Dealing with Human Language
ElasticSearch 2 (19) - 语言处理系列之故事开始的更多相关文章
- ElasticSearch 2 (27) - 信息聚合系列之故事开始
ElasticSearch 2 (27) - 信息聚合系列之故事开始 摘要 到目前为止,本书都在着重介绍搜索.对于搜索,我们有查询条件以及与查找到与条件匹配的集合.这个过程就和如大海捞针一样. 对于聚 ...
- ElasticSearch 2 (26) - 语言处理系列之打字或拼写错误
ElasticSearch 2 (26) - 语言处理系列之打字或拼写错误 摘要 我们喜欢在对结构化数据(如:日期和价格)做查询时,结果只返回那些能精确匹配的文档.但是,好的全文搜索不应该有这样的限制 ...
- ElasticSearch 2 (25) - 语言处理系列之同义词
ElasticSearch 2 (25) - 语言处理系列之同义词 摘要 词干提取有助于通过简化屈折词到它们词根的形式来扩展搜索的范围,而同义词是通过关联概念和想法来扩展搜索范围的.或许没有文档能与查 ...
- ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度
ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度 摘要 在信息检索早期,磁盘和内存相较我们今天的使用只是很小的一部分.将索引空间保持在一个较小的水平是至关重要的,节省每个 ...
- ElasticSearch 2 (23) - 语言处理系列之词根提取
ElasticSearch 2 (23) - 语言处理系列之词根提取 摘要 世界上大多数语言都是屈折变化的,意思是词语可以通过变形来表达不同的含义: 数(Number): fox, foxes 时态( ...
- ElasticSearch 2 (22) - 语言处理系列之标记规范化
ElasticSearch 2 (22) - 语言处理系列之标记规范化 摘要 将文本拆解成标记只是工作的一半.为了使这些标记更容易被搜索到,它们需要经过一个规范化的处理过程,以移除相同单词间不重要的差 ...
- ElasticSearch 2 (21) - 语言处理系列之单词识别
ElasticSearch 2 (21) - 语言处理系列之单词识别 摘要 一个英语单词相对容易识别:因为英语单词是被空格或(某些)标点符号隔开的.但在英语中也有反例:you're 这个词是一个单词还 ...
- ElasticSearch 2 (20) - 语言处理系列之如何开始
ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...
- ElasticSearch 2 (18) - 深入搜索系列之控制相关度
ElasticSearch 2 (18) - 深入搜索系列之控制相关度 摘要 处理结构化数据(比如:时间.数字.字符串.枚举)的数据库只需要检查一个文档(或行,在关系数据库)是否与查询匹配. 布尔是/ ...
随机推荐
- 小米3系统计算器自己定义开关控件-MySwitchView
1.前言 在android4.0以后,有switch控件.相似于iPhone上面滑块的效果.可是仅仅能用在4.0以后的系统中.之前的平台.就无法使用这种控件. 近段时间.看到了 ...
- docker swarm英文文档学习-10-使用Docker密钥管理敏感数据
Manage sensitive data with Docker secrets使用Docker secrets管理敏感数据 About secrets 对于Docker Swarm服务来说,sec ...
- WinForm中Component Class、User Control及Custom Control的区别和使用
NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功 能.确定创建何种类型的控件可 ...
- 浅谈 MVC 和 MTV
浅谈 MVC 和 MTV 一.MVC M:model,模型,就是数据模型,负责数据的存取: V:view,视图,负责页面的展示逻辑: C:controller,控制器,负责业务逻辑的处理: 二.MTV ...
- Android MD5算法
package com.example.myapi.md5; import java.io.UnsupportedEncodingException; import java.security.Mes ...
- STM32 中 BIT_BAND(位段/位带)和别名区使用入门(转载)
一. 什么是位段和别名区 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 :这样就把 ...
- 大数据入门第二十天——scala入门(二)scala基础02
一. 类.对象.继承.特质 1.类 Scala的类与Java.C++的类比起来更简洁 定义: package com.jiangbei //在Scala中,类并不用声明为public. //Scala ...
- 2017-2018-2 《网络对抗技术》20155322 Exp9 web安全基础
[-= 博客目录 =-] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 2-实践过程 2.1-HTML 2.2-Injection Flaws 2.3-XSS 2.4-CSRF ...
- tf tensor 输出
在学习TensorFlow的过程中,我们需要知道某个tensor的值是什么,这个很重要,尤其是在debug的时候.也许你会说,这个很容易啊,直接print就可以了.其实不然,print只能打印输出sh ...
- Qt FFMPEG+OpenCV开启摄像头
//ffmpegDecode.h #ifndef __FFMPEG_DECODE_H__ #define __FFMPEG_DECODE_H__ #include "global.h&quo ...