通常可以通过文档集频率和维护停用词表的方式来判断停用词 。
词项处理
词项处理,是指在原本的词项上在做一些额外的处理,比如归一化、词形归并、词干还原等操作,以提高搜索的效果 。并不是所有的需求和业务都要词项处理,需要根据场景来判断 。
1.归一化
- USA - U.S.A. [缩写]
- 7月30日 - 7/30 [中英文]
- color - colour [通假词]
- 开心 - 高兴 [同义词扩展范畴]
2.词形归并(Lemmatization)
针对英语同一个词有不同的形态,可以做词形归并成一个,如:
- am, are, is -> be
- car, cars, car's, cars' -> car
- the boy's cars are different colors -> the boy car be different color
通常指的就粗略的去除单词两端词缀的启发式过程
- automate(s), automatic, automation -> automat.
- 高高兴兴 -> 高兴 [中文重叠词还原]
- 明明白白 -> 明白
Part2、倒排索引要了解倒排索引,先看一下什么是正排索引 。比如有下面两句话:
- id1, “搜索引擎提供检索服务”
- id2, “搜索引擎是信息检索系统”
正排索引就是 MySQL 里的 B+ Tree,索引的结果是:
- “搜索引擎是信息检索系统” -> id2
- “搜索引擎提供检索服务” -> id1
倒排索引
第一步 分词
- “搜索引擎-提供-检索-服务” -> id1
- “搜索引擎-信息-检索-系统” -> id2
- 搜索引擎
- 提供
- 检索
- 服务
- 信息
- 系统
- 搜索引擎 -> id1, id2
- 提供 -> id1
- 检索 -> id1, id2
- 服务 -> id1
- 信息 -> id2
- 系统 -> id2
倒排索引到此也就讲清楚了吧 。
存储结构
以 Lucene 为例,简单说明一下 Lucene 的存储结构 。从大到小是Index -> Segment -> Doc -> Field -> Term,类比 MySQL 为 Database -> Table -> Record -> Field -> Value 。
Part 3、查询结果排序搜索结果排序是根据 关键字 和 Document 的相关性得分排序,通常意义下,除了可以人工的设置权重 boost,也存在一套非常有用的相关性得分算法,看完你会觉得非常有意思 。
TF-IDF
TF(词频)-IDF(逆文档频率) 在自动提取文章关键词上经常用到,通过它可以知道某个关键字在这篇文档里的重要程度 。其中 TF 表示某个 Term 在 Document 里出现的频次,越高说明越重要;DF 表示在全部 Document 里,共有多少个 Document 出现了这个词,DF 越大,说明这个词很常见,并不重要,越小反而说明他越重要,IDF 是 DF 的倒数(取log),IDF 越大,表示这个词越重要 。
TF-IDF 怎么影响搜索排序,举一个实际例子来解释:
假定现在有一篇博客《Blink 实战总结》,我们要统计这篇文章的关键字,首先是对文章分词统计词频,出现次数最多的词是--"的"、"是"、"在",这些是“停用词”,基本上在所有的文章里都会出现,他对找到结果毫无帮助,全部过滤掉 。
推荐阅读
- 网络电话的原理是什么
- 网络爬虫的原理
- 网桥的工作原理
- 网络传输的原理
- 太阳能热水器工作原理 太阳能热水器的基本参数
- 软件无线电原理与应用 5g网络架构及关键技术分析
- 入射面和折射面的定义及其物理原理 入射面和折射面的定义是什么
- 机械原理关于斜齿轮重合度的问题
- 机械千斤顶的原理急
- 机械制冷的原理