python 实现倒排索引的方法

yipeiwu_com5年前Python基础

代码如下:

#encoding:utf-8

fin = open('1.txt', 'r')

'''
建立正向索引:
 “文档1”的ID > 单词1:出现位置列表;单词2:出现位置列表;…………
 “文档2”的ID > 此文档出现的关键词列表。
'''
forward_index = {}
for line in fin:
 line = line.strip().split()
 forward_index[int(line[0])] = {}
 words = line[1].split(',')
 for i, index in enumerate(words):
  if int(index) not in forward_index[int(line[0])].keys():
   forward_index[int(line[0])][int(index)] = [i]
  else:
   forward_index[int(line[0])][int(index)].append(i)
print 'forward_index:', forward_index

'''
建立倒排索引:
 “关键词1”:“文档1”的ID,“文档2”的ID,…………
 “关键词2”:带有此关键词的文档ID列表。
'''
inverted_index = {}
for doc_id, words in forward_index.items():
 for word_id in words.keys():
  if word_id not in inverted_index.keys():
   inverted_index[word_id] = [doc_id]
  elif doc_id not in inverted_index[word_id]:
   inverted_index[word_id].append(doc_id)
print 'inverted_index:', inverted_index

输入(文档id:单词id):

1 3,4 
2 3,4,2,4 
3 2

输出:

forward_index: {1: {3: [0], 4: [1]}, 2: {2: [2], 3: [0], 4: [1, 3]}, 3: {2: [0]}} 
inverted_index: {2: [2, 3], 3: [1, 2], 4: [1, 2]}

以上这篇python 实现倒排索引的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python中类的输出或类的实例输出为<__main__类名 object at xxxx>这种形式的原因

python中类的输出或类的实例输出为<__main__类名 object at xxxx>这种形式的原因

原因: __str__()这个特殊方法将对象转换为字符串的结果 效果图: 代码:  # 定义一个Person类 class Person(object): """人类...

Flask框架学习笔记之路由和反向路由详解【图文与实例】

Flask框架学习笔记之路由和反向路由详解【图文与实例】

本文实例讲述了Flask框架学习笔记之路由和反向路由。分享给大家供大家参考,具体如下: #-*- coding:utf-8 -*- from flask import Flask,...

详解Python进阶之切片的误区与高级用法

众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串、列表、元组...)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slice)就是一种截取索引片段的...

详解python中的模块及包导入

python中的导入关键字:import 以及from  import 1、import   import一般用于导入包以及模块。   不过有个小问题:   (1)当导入的是...

Python坐标线性插值应用实现

Python坐标线性插值应用实现

一、背景 在野外布设700米的测线,点距为10米,用GPS每隔50米测量一个坐标,再把测线的头和为测量一个坐标。现在需使用线性插值的方法求取每两个坐标之间的其他4个点的值。 二、插值原...