`

倒排索引的简单实现

 
阅读更多
首先看一个例子:



假设有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
0
1
分享到:
评论

相关推荐

    基于mapreduce的中文倒排索引简单实现.zip

    标题中的“基于MapReduce的中文倒排索引简单实现”是指在大数据处理场景下,使用Hadoop的MapReduce框架来构建中文文本的倒排索引。倒排索引是一种常用的全文检索技术,它能快速定位到文档中某个关键词出现的位置。在...

    倒排索引java实现

    在Java中实现倒排索引,可以利用标准库或者其他第三方库,如Apache Lucene,但这里我们主要讨论基于自定义代码的实现。 首先,我们需要理解倒排索引的基本原理。倒排索引由两部分组成:词典(Dictionary)和倒排...

    文本全文搜索引擎 利用倒排索引实现

    倒排索引是实现这种搜索引擎的关键技术,它极大地优化了文本匹配和搜索过程。在这个主题中,我们将深入探讨倒排索引的概念、工作原理以及在Python中的实现。 **倒排索引概念** 倒排索引(Inverted Index)是一种...

    基于倒排索引表的搜索引擎简单实现

    倒排索引是搜索引擎实现高效搜索的关键技术之一。在这个项目中,我们使用Java编程语言来实现一个简单的搜索引擎,主要涉及以下几个核心知识点: 1. **倒排索引**:倒排索引是一种数据结构,它将每个词映射到包含这...

    倒排索引实现简单的搜索引擎功能

    倒排索引是一种高效的数据结构,常用于全文搜索引擎中,以快速定位到包含特定查询词的文档。在本项目中,我们使用MFC(Microsoft Foundation Classes)库,一个基于C++的类库,来实现一个简单的可视化的搜索引擎。...

    大数据实验报告Hadoop编程实现InvertedIndex文档倒排索引程序附源码.doc

    大数据实验报告中,实现了使用Hadoop编程的InvertedIndex文档倒排索引程序。该程序使用Hadoop的MapReduce框架,通过Map、Combine和Reduce三个阶段,实现了文档倒排索引的生成。 标题解释: 大数据实验报告Hadoop...

    C++倒排索引

    在C++中实现倒排索引可以帮助我们理解其背后的算法和数据结构。在这个项目中,我们将关注如何读入文本集,创建倒排索引,并且能够处理文件替换的情况。 首先,我们需要理解倒排索引的基本概念。倒排索引是由词汇项...

    文档倒排索引的MapReduce程序设计与实现

    根据提供的文件信息,本文将详细探讨“文档倒排索引的MapReduce程序设计与实现”这一主题,重点介绍倒排索引的基本概念、其在搜索引擎中的应用以及如何利用MapReduce框架来实现高效的文档倒排索引构建。 ### 倒排...

    python 实现倒排索引的方法

    本文将详细介绍如何使用Python语言来实现倒排索引,并通过一个简单的例子来演示其工作原理。 #### 一、什么是倒排索引? 倒排索引(Inverted Index),又称为反向索引或逆向索引,是一种用于快速查询文档集合中...

    使用倒排索引实现的简单的搜索引擎

    使用倒排索引实现的简单的搜索引擎demo 能对莎士比亚全集的文本进行搜索,并显示该词语所在的篇目和所在句子 源代码及说明也可在github获取 https://github.com/yunwei37/myClassNotes

    制作简单的搜索引擎,构建倒排索引

    搜索引擎是信息检索领域的重要工具,其核心在于倒排索引的构建。倒排索引是一种高效的数据结构,用于快速定位到包含特定查询词的文档。在这个项目中,我们使用简单的C语言来实现这一过程,这对于初学者理解搜索引擎...

    C++实现的最简单的倒排索引

    在这个“C++实现的最简单的倒排索引”项目中,我们将探讨如何用C++编程语言构建一个基础的倒排索引系统。 首先,我们需要理解倒排索引的基本概念。倒排索引由两部分组成:词典(Dictionary)和倒排列表(Posting ...

    基于Go实现简单的倒排索引源码+数据+sql数据库.zip

    基于Go实现简单的倒排索引源码+数据+sql数据库.zip基于Go实现简单的倒排索引源码+数据+sql数据库.zip基于Go实现简单的倒排索引源码+数据+sql数据库.zip基于Go实现简单的倒排索引源码+数据+sql数据库.zip基于Go实现...

    搜索引擎-倒排索引基础知识

    三、倒排索引简单实例 建立倒排索引的思路非常简单。首先,需要将文档集合中的每个文档自动切分成单词序列,然后对每个不同的单词赋予唯一的单词编号,同时记录下哪些文档包含这个单词。最终,可以得到最简单的倒排...

    java实现倒排索引表的布尔查询

    本文将深入探讨如何使用Java实现一个简单的倒排索引表,并结合布尔查询进行文本搜索。 首先,我们需要理解倒排索引的基本概念。倒排索引是从词到文档的映射,即它将每个词关联到包含该词的所有文档的列表。这种索引...

    ir.rar_IR_ir倒排_倒排索引_分词_索引

    本系统所实现的功能主要涵盖了分词和倒排索引的构建,其中分词采用了正向最大匹配法。下面将详细讲解这两个关键概念及其工作原理。 1. **分词**: 分词是信息检索中的第一步,即将一段文本分解成有意义的词语单元...

    BSBI倒排索引算法

    在Python 3.6环境下,该算法被用于处理中文语料库,实现文本的分词、停用词过滤,以及创建倒排索引。 首先,让我们详细了解一下倒排索引。在信息检索系统中,倒排索引是一种从关键词到其所在文档的映射。它将每个词...

    基于倒排索引的搜索引擎.zip

    学生可能通过编程实现了一个简单的搜索引擎原型,以演示倒排索引的工作原理。 "Java程序设计实验一帮助文档.ppt"可能是一个辅助教学材料,用于指导学生如何使用Java语言来构建搜索引擎。Java是一种广泛应用于开发...

    倒排索引.docx

    倒排索引是一种高效的数据结构,特别是在大数据场景和搜索引擎中,用于快速检索包含特定关键词的文档。相较于传统的正向索引,倒排索引能够显著提高检索效率,尤其是在处理海量数据时。 正向索引是一种按照文档ID...

Global site tag (gtag.js) - Google Analytics