首先看一个例子:
假设有3篇文章,file1, file2, file3,文件内容如下:
file1 (单词1,单词2,单词3,单词4....)
file2 (单词a,单词b,单词c,单词d....)
file3 (单词1,单词a,单词3,单词d....)
那么建立的倒排索引就是这个样子:
单词1 (file1,file3)
单词2 (file1)
单词3 (file1,file3)
单词a (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
分享到:
相关推荐
标题中的“基于MapReduce的中文倒排索引简单实现”是指在大数据处理场景下,使用Hadoop的MapReduce框架来构建中文文本的倒排索引。倒排索引是一种常用的全文检索技术,它能快速定位到文档中某个关键词出现的位置。在...
在Java中实现倒排索引,可以利用标准库或者其他第三方库,如Apache Lucene,但这里我们主要讨论基于自定义代码的实现。 首先,我们需要理解倒排索引的基本原理。倒排索引由两部分组成:词典(Dictionary)和倒排...
倒排索引是实现这种搜索引擎的关键技术,它极大地优化了文本匹配和搜索过程。在这个主题中,我们将深入探讨倒排索引的概念、工作原理以及在Python中的实现。 **倒排索引概念** 倒排索引(Inverted Index)是一种...
倒排索引是搜索引擎实现高效搜索的关键技术之一。在这个项目中,我们使用Java编程语言来实现一个简单的搜索引擎,主要涉及以下几个核心知识点: 1. **倒排索引**:倒排索引是一种数据结构,它将每个词映射到包含这...
倒排索引是一种高效的数据结构,常用于全文搜索引擎中,以快速定位到包含特定查询词的文档。在本项目中,我们使用MFC(Microsoft Foundation Classes)库,一个基于C++的类库,来实现一个简单的可视化的搜索引擎。...
大数据实验报告中,实现了使用Hadoop编程的InvertedIndex文档倒排索引程序。该程序使用Hadoop的MapReduce框架,通过Map、Combine和Reduce三个阶段,实现了文档倒排索引的生成。 标题解释: 大数据实验报告Hadoop...
在C++中实现倒排索引可以帮助我们理解其背后的算法和数据结构。在这个项目中,我们将关注如何读入文本集,创建倒排索引,并且能够处理文件替换的情况。 首先,我们需要理解倒排索引的基本概念。倒排索引是由词汇项...
根据提供的文件信息,本文将详细探讨“文档倒排索引的MapReduce程序设计与实现”这一主题,重点介绍倒排索引的基本概念、其在搜索引擎中的应用以及如何利用MapReduce框架来实现高效的文档倒排索引构建。 ### 倒排...
本文将详细介绍如何使用Python语言来实现倒排索引,并通过一个简单的例子来演示其工作原理。 #### 一、什么是倒排索引? 倒排索引(Inverted Index),又称为反向索引或逆向索引,是一种用于快速查询文档集合中...
使用倒排索引实现的简单的搜索引擎demo 能对莎士比亚全集的文本进行搜索,并显示该词语所在的篇目和所在句子 源代码及说明也可在github获取 https://github.com/yunwei37/myClassNotes
搜索引擎是信息检索领域的重要工具,其核心在于倒排索引的构建。倒排索引是一种高效的数据结构,用于快速定位到包含特定查询词的文档。在这个项目中,我们使用简单的C语言来实现这一过程,这对于初学者理解搜索引擎...
在这个“C++实现的最简单的倒排索引”项目中,我们将探讨如何用C++编程语言构建一个基础的倒排索引系统。 首先,我们需要理解倒排索引的基本概念。倒排索引由两部分组成:词典(Dictionary)和倒排列表(Posting ...
基于Go实现简单的倒排索引源码+数据+sql数据库.zip基于Go实现简单的倒排索引源码+数据+sql数据库.zip基于Go实现简单的倒排索引源码+数据+sql数据库.zip基于Go实现简单的倒排索引源码+数据+sql数据库.zip基于Go实现...
三、倒排索引简单实例 建立倒排索引的思路非常简单。首先,需要将文档集合中的每个文档自动切分成单词序列,然后对每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词。最终,可以得到最简单的倒排...
本文将深入探讨如何使用Java实现一个简单的倒排索引表,并结合布尔查询进行文本搜索。 首先,我们需要理解倒排索引的基本概念。倒排索引是从词到文档的映射,即它将每个词关联到包含该词的所有文档的列表。这种索引...
本系统所实现的功能主要涵盖了分词和倒排索引的构建,其中分词采用了正向最大匹配法。下面将详细讲解这两个关键概念及其工作原理。 1. **分词**: 分词是信息检索中的第一步,即将一段文本分解成有意义的词语单元...
在Python 3.6环境下,该算法被用于处理中文语料库,实现文本的分词、停用词过滤,以及创建倒排索引。 首先,让我们详细了解一下倒排索引。在信息检索系统中,倒排索引是一种从关键词到其所在文档的映射。它将每个词...
学生可能通过编程实现了一个简单的搜索引擎原型,以演示倒排索引的工作原理。 "Java程序设计实验一帮助文档.ppt"可能是一个辅助教学材料,用于指导学生如何使用Java语言来构建搜索引擎。Java是一种广泛应用于开发...
倒排索引是一种高效的数据结构,特别是在大数据场景和搜索引擎中,用于快速检索包含特定关键词的文档。相较于传统的正向索引,倒排索引能够显著提高检索效率,尤其是在处理海量数据时。 正向索引是一种按照文档ID...