C++ 倒排索引的实现
来源:互联网 发布:淘宝小二商家客服电话 编辑:程序博客网 时间:2024/06/10 11:57
1.1基本介绍
倒排索引的概念很简单:就是将文件中的单词作为关键字,然后建立单词与文件的映射关系。当然,你还可以添加文件中单词出现的频数等信息。倒排索引是搜索引擎中一个很基本的概念,几乎所有的搜索引擎都会使用到倒排索引。
1.2 准备工作
² 5个源文件
Test0.txt, Test1.txt,Test2.txt, Test3.txt, Test4.txt
里面包含了一些英文句子,由单词组成,空格分开
² Index.txt
由文件ID和文件的绝对路径构成,一个文件占一行
² Result.txt
显示结果的文件,倒排索引表将在里面显示出来,单词后面跟的文件ID
1.3算法描述
² 使用C++的STL中的MAP存储索引表,string 存储单词,vector存储文件ID,循环读入文件,将文件中的单词一个一个读入进来,再添加上文件ID,直到所有的文件都被处理完。遍历索引表MAP,输出结果。
² 字典树建立,例程将26个字母映射成0~25的数字,每读入一个的单词插入单词的同时建立起字典树,每个字母有26个后继,用malloc动态分配空间,
该程序将求出输入以某个字符串为前缀的单词数量。
1.4算法说明
² 只能分割英文单词,建立索引表,中文词组无法分割出来
² 没有添加对符号的处理,符号只能随其紧挨的单词一起出现
² 没有统计单词频率信息
² 没有将单词统一处理成为它们的原型,增加了索引表的长度
² 因为map默认按键值弱排序,因此输出的结果是按单词的字典序输出
² index.txt,result.txt是用freopen重定向打开的,这2个文件必须在源代码的同一目录下才能运行成功。
源输入文件是以绝对路径保存在index.txt中,移植运行时需改变路径
源代码:
#include <iostream>#include <fstream>#include <stdio.h>#include <string.h>#include <map>#include <vector>#include <string>#include <algorithm>using namespace std;map<string,vector<int>> indextable; // 倒排索引表void init() // 初始化表{indextable.clear();}int main(){//重定向到index.txt读入,输出到result.txt. index.txt,result.txt都在当前目录下freopen("index.txt","r",stdin);freopen("result.txt","w",stdout);init();int id;string filepath; // 文件路径名while(cin>>id>>filepath){ifstream fin(filepath.c_str()); // 打开文件路径下的文件string s;while(fin>>s) // 一个单词一个单词的读入{indextable[s].push_back(id); // 把当前单词对应的的文件名加入到单词对应的ID数组中}}map<string,vector<int>>::iterator map_it; // 索引迭代器map_it = indextable.begin();while(map_it != indextable.end()) // 遍历整个索引表输出,因为MAP的键值是严格弱排序,因此输出是字典序{string tmp = map_it->first;cout << tmp << " ";for(int i = 0;i != indextable[tmp].size();i++) cout << indextable[tmp][i] << " ";cout << endl;map_it++;}cin.get();cin.get();return 0;}
来自于:http://m.blog.csdn.net/blog/lentty1452/8679813
- 倒排索引实现
- 实现倒排索引
- C++ 倒排索引的实现
- C++ 倒排索引的实现
- hadoop实现简单的倒排索引
- C++ 倒排索引的实现
- 倒排索引的简单实现
- 倒排索引算法的Java实现
- MapReduce 倒排索引的实现
- 倒排索引的java实现
- 倒排索引 - C/C++
- mapreduce实现倒排索引
- MapReduce实现倒排索引
- mapreduce实现倒排索引
- hadoop实现倒排索引
- Python 实现倒排索引
- 倒排索引C++实现
- MapReduce倒排索引实现
- 给定一系列x轴的点坐标,例如 1,3,7,8,9,11这些坐标升序放在数组中,现在给一根绳子,长度为4,问绳子最多能覆盖的点数有多少,例如绳子放前面只能覆盖两个点,1,3,如果放后面能覆盖4个点。
- 适配iOS7开发
- window下一台PC机器上安装多个mysql的方法
- 超链接做按钮
- Android中按键消息分发机制 上
- C++ 倒排索引的实现
- 陕西饮食之种类
- oracle 记录一下 活动商品退货
- 模2运算的原理
- mscomm控件使用详解
- Android NDK学习 <三> Android.mk实例和NDK实用技巧
- matlab中二维高斯模板的计算
- linux下两台服务器文件实时同步方案设计和实现
- Memory Policy