2019独角兽企业重金招聘Python工程师标准>>>

1、什么是倒排索引。

e>>>(⊙o⊙)… 这是我见过最垃圾的翻译了,完全让人误解他的意思。

这个名称很容易让人理解为从A-Z的排序颠倒成Z-A,其实根本不是这么回事。

英文 原版为 inverted index  个人感觉翻译成 反向索引 比较合适。

倒排索引是区别于正排索引(forward index)来说的。

解释:

文档是有许多的单词组成的,其中每个单词也可以在同一个文档中重复出现很多次,当然,同一个单词也可以出现在不同的文档中。

正排索引(forward index):从文档角度看其中的单词,表示每个文档(用文档ID标识)都含有哪些单词,以及每个单词出现了多少次(词频)及其出现位置(相对于文档首部的偏移量)。

倒排索引(inverted index,或inverted files):从单词角度看文档,标识每个单词分别在那些文档中出现(文档ID),以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)。

简单记为:
正排索引:文档 ---> 单词 常规的索引是文档到关键词的映射
倒排索引:单词 ---> 文档 倒排索引是关键词到文档的映射

应用场景:

倒排索引有着广泛的应用场景,比如搜索引擎、大规模数据库索引、文档检索、多媒体检索/信息检索领域等等。总之,倒排索引在检索领域是很重要的一种索引机制。

2、inverted index 的java实现

假设有3篇文章,file1, file2, file3,文件内容如下:

那么建立的倒排索引就是这个样子:

下面是对于倒排索引的一个简单的实现。该程序对于输入的一段文字,查找出该词所出现的行号以及出现的次数。

import java.io.*;
import java.util.HashMap;
import java.util.Map;  public class InvertedIndex {  private Map<String, Map<Integer, Integer>> index;  private Map<Integer, Integer> subIndex;  public void createIndex(String filePath) {  index = new HashMap<String, Map<Integer, Integer>>();  try {  File file = new File(filePath);  InputStream is = new FileInputStream(file);  BufferedReader read = new BufferedReader(new InputStreamReader(is));  String temp = null;  int line = 1;  while ((temp = read.readLine()) != null) {  String[] words = temp.split(" ");  for (String word : words) {  if (!index.containsKey(word)) {  subIndex = new HashMap<Integer, Integer>();  subIndex.put(line, 1);  index.put(word, subIndex);  } else {  subIndex = index.get(word);  if (subIndex.containsKey(line)) {  int count = subIndex.get(line);  subIndex.put(line, count+1);  } else {  subIndex.put(line, 1);  }  }  }  line++;  }  read.close();  is.close();  } catch (IOException e) {  System.out.println("error in read file");  }  }  public void find(String str) {  String[] words = str.split(" ");  for (String word : words) {  StringBuilder sb = new StringBuilder();  if (index.containsKey(word)) {  sb.append("word: " + word + " in ");  Map<Integer, Integer> temp = index.get(word);  for (Map.Entry<Integer, Integer> e : temp.entrySet()) {  sb.append("line " + e.getKey() + " [" + e.getValue() + "] , ");   }  } else {  sb.append("word: " + word + " not found");  }  System.out.println(sb);  }  }  public static void main(String[] args) {  InvertedIndex index = new InvertedIndex();  index.createIndex("news.txt");  index.find("I love Shanghai today");  }
}  

其中,输入文件news.txt内容为:

I am eriol
I live in Shanghai and I love Shanghai
I also love travelling
life in Shanghai
is beautiful  

输出结果为:

word: I in line 1 [1] , line 2 [2] , line 3 [1] ,
word: love in line 2 [1] , line 3 [1] ,
word: Shanghai in line 2 [2] , line 4 [1] ,
word: today not found  

参考来自!  倒排索引简单实现

知乎:倒排索引为什么叫倒排索引?

另外的资源学习(本文并未涉及)

倒排索引的java实现

MapReduce实现倒排索引(类似协同过滤)

hadoop倒排索引

转载于:https://my.oschina.net/zjllovecode/blog/1554246

倒排索引 inverted index相关推荐

  1. MapReduce功能实现十---倒排索引(Inverted Index)

    MapReduce功能实现系列:       MapReduce功能实现一-Hbase和Hdfs之间数据相互转换       MapReduce功能实现二-排序       MapReduce功能实现 ...

  2. 正排索引(forward index)与倒排索引(inverted index)

    一.正排索引(前向索引) 正排索引也称为"前向索引".它是创建倒排索引的基础,具有以下字段. (1)LocalId字段(表中简称"Lid"):表示一个文档的局部 ...

  3. python 倒排索引(Inverted Index)

    倒排索引是一种检索方式,比如存入数据库的数据是存一篇文章进去,然而检索时我们经常需要通过关键词检索,所以提前做好倒排索引即可方便检索,而省略掉全表扫描的问题了,这是一种用空间换时间的方法. 使用字典构 ...

  4. ElasticSearch 学习笔记(一):倒排索引(Inverted index)

    分析一个术语,要先从名称入手 倒排索引,英文原名Inverted index,大概因为 Invert 有颠倒的意思,就被翻译成了倒排.但是倒排这个名称很容易让人理解为从A-Z颠倒成Z-A.个人觉得翻译 ...

  5. 斯坦福NLP笔记72 —— The Inverted Index

    2019独角兽企业重金招聘Python工程师标准>>> Inverted Index是信息抽取里最常用的数据结构,来看看他长啥样: Brutus指向数字X则代表X号文档中包含了Bru ...

  6. 【es】Elasticsearch:inverted index,doc_values及source

    文章目录 1.概述 2.Inverted index 3.Source 4.Doc_values 1.概述 转载:https://www.cnblogs.com/sanduzxcvbnm/p/1208 ...

  7. 反向索引(Inverted Index)

    转自:http://zhangyu8374.iteye.com/blog/86307 反向索引是一种索引结构,它存储了单词与单词自身在一个或多个文档中所在位置之间的映射.反向索引通常利用关联数组实现. ...

  8. inverted index

    Index是啥? 书后面的index实际上是inverted index,是用来查找的. 是一个词,出现在document的什么地方,page number.f(Word) returns a set ...

  9. Lucene Inverted index(倒排索引)原来快速入门

    Lucene是一个高性能的JAVA全文检索工具包,它使用的是倒排文件索引结构.该结构及相应的生成算法如下: 设有两篇文章1和2: 文章1的内容为:Tom lives in Guangzhou, I l ...

最新文章

  1. 17DOM之操作元素
  2. 通过Spring配置文件中bean中的property赋值
  3. 行业观察(一)| 从渠道为王到数据为王——浅谈服装零售企业的数字化转型...
  4. 虚拟服务器系统一般用那种,虚拟主机 选什么系统
  5. 怎么中文读_这些中文名字如果用日语念出来会怎样?!
  6. 如何为libs目录下的jar包关联源代码
  7. 网络编程之 TCP / UDP 及其流程比较
  8. 分解质因数-洛谷P3200 [HNOI2009]有趣的数列
  9. Delphi与各数据库数据类型比较
  10. 怎么配置服务器php环境,配置PHP服务器环境步骤详解
  11. c语言 哪些运算符左右需要空格,C语言运算符优先级口诀?
  12. 无意中发现的MSDN软件下载网站
  13. java自己写的网络爬虫
  14. Rabbitmq消息发布确认机制
  15. 跟着源码看lcn分布式事务
  16. 电脑可以连接手机热点,却无法连路由器无线wifi
  17. 增加收入的 6 种方式
  18. 有余记账(h5记账类项目)
  19. 为何Adobe国际认证证书被那么多人吐槽,看完你就明白了
  20. 交通元宇宙的技术与应用(附下载)

热门文章

  1. Java注解@Mock和@InjectMocks及@Mock和@Spy之间的区别
  2. 实时音频采集与播放技术的研究
  3. 线性回归入门案例 家庭用电量预测
  4. 页面点击出现小心心。
  5. Excel实现阅后即焚地信息保护方法_艾孜尔江撰稿
  6. matlab gui素材,数字图像处理配套MATLAB代码及图片素材
  7. vue实现图片预览功能
  8. 日期格式转化成时间戳,在IOS手机上显示成NaN
  9. STM32-NVIC中断优先级管理
  10. 大气遥感中的方位角和散射角