读取文本文件内容,根据内容构建 类型-书名 的倒排索引,文件内容如下

加分项:实现带位置的倒排索引
```
西游记 古典小说 浪漫主义
水浒传 古典小说 历史
三国演义 古典小说 历史
红高粱 现代小说 浪漫主义
史记 史书 历史 纪传体
资治通鉴 史书 历史 编年体
```

根据倒排索引实现某个标签的小说有哪些,例如查询所有古典小说,结果是西游记,水浒传,三国演义

倒排索引一般在大规模文档中使用以提高索引效率。在倒排索引中,每个词项都有一个记录出现该词项的所有文档的列表,该表中的每个元素记录的是词项在某文档中的一次出现信息,这个表中的每个元素通常称为倒排记录,每个词项对应的整个表称为倒排记录表,所有词项的倒排记录表一起构成全体倒排记录表。要建立倒排索引,首先要收集需要建立索引的文档,然后将每篇文档转换成一个个词条的列表,这个过程通常称为词条化;之后要进行语言学预处理,产生归一化的词条来作为词项;再对所有文档按照其中出现的词项来建立倒排索引,索引中包括一部词典和一个全体倒排记录表。

对于本题,我使用Python语言实现了带位置的倒排索引。首先获取dir文件夹下所有的txt文件,并将其存入file列表中;之后进行语言学的预处理,加载停用词,去除标点、数字等,将文本拆分成(词语,位置)的二元组形式,并将这些二元组存入word_list列表;之后建立一个词典inverted,其中key为词语,value为位置,循环所有文件建立最终的倒排索引,并将结果存入inverted.json中。

import re, os,  json
"""
建立带位置的倒排索引
"""
# 从文件夹中获取文件
def get_files(dir):files = []for file in os.listdir(dir):if file.endswith('txt'):files.append(file)return files#将文本拆分为(位置、单词)
def word_split(text):stopwords = ['的', '了', '呢']word_list = []# 去除数字text = re.sub(pattern=r"\d", repl=r"", string=text)# 只包含单词和小写字母text = re.findall(r'\w+', text.lower())for index, word in enumerate(text):# 去除停用词if word not in stopwords:word_list.append((index, word))return word_list# 建立一个字典,词语作为key,位置作为value
# 对一个文件
def inverted_index_single(text):inverted = {}for index, word in text:locations = inverted.setdefault(word, [])locations.append(index)return inverted# 循环所有的文件建立最终的倒排索引
def inverted_index_all(inverted, doc_id, doc_inverted):for word, locations in doc_inverted.items():indices = inverted.setdefault(word, {})indices[doc_id] = locationsreturn inverteddef inverted_index_from_folder(dir):# 得到文件files = get_files(dir)# 最终的倒排索引inverted_mul = {}for file in files:with open(dir + file, 'r') as myfile:# 字符串包含单个文件中的所有内容words = myfile.read().replace('\n', ' ')split_words = word_split(words)# 为单个文件创建反向索引inverted_single_file = inverted_index_single(split_words)# 创建最终的倒排索引inverted_index_all(inverted_mul, file, inverted_single_file)return inverted_mul#将倒排索引保存到json文件
def save_index(inverted_index):with open('inverted_index.json', 'w') as fp:json.dump(inverted_index, fp,ensure_ascii=False)def main():inverted_index = inverted_index_from_folder("D:/books/")save_index(inverted_index)print("已将倒排索引结果存入inverted.json!")if __name__ == "__main__":main()

【大数据管理】Python实现带位置的倒排索引相关推荐

  1. 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(2)

    导语 上一期我们带大家完成了魔塔游戏每一层的初始化画面的制作: 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(1) 这一期我们会带大家进一步复现我们的魔塔小游戏,主要内容包括英雄类 ...

  2. 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(3)

    导语 上一期我们主要带大家写了勇士类,以及勇士与一些简单的地图元素接触时所触发的事件: 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(2) 这一期我们会带大家进一步复现我们的魔塔小 ...

  3. 十大被低估的python库_小白必读!十大被低估的Python自带库!

    原标题:小白必读!十大被低估的Python自带库! 大家在学习python的过程中,都会了解到python的一个强大的功能在于各种强大的第三方库函数,大家只需要通过pip install 即可安装我们 ...

  4. python add picture显示过大_利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例...

    前言 最近的一个项目中需要在图片上添加文字,使用了OpenCV,结果发现利用opencv给图像添加文字有局限.可利用的字体类型比较少,需要安装Freetype扩展,比较复杂.而且不能用putText函 ...

  5. 今天带大家用Python制作一个FlappyBird(飞翔的小鸟)的小游戏

    相关文件 源码分享,问题解答!! 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 对了大家可以关注小编的公众号哟~~ 有很多资源可以领取的哟!! 大家也可以去b站看我的一些教学视频哟!! 更多P ...

  6. 十大被低估的Python自带库!

    大家在学习python的过程中,都会了解到python的一个强大的功能在于各种强大的第三方库函数,大家只需要通过pip install 即可安装我们需要的库函数. 大家往往只是关注自己安装的pytho ...

  7. 浪潮云跻身中国政务大数据管理平台市场领导者位置

    近日,IDC正式发布<IDC MarketScape: 中国政务大数据管理平台市场厂商评估,2021>报告,对市场主流代表性厂商进行研究分析.研究结果显示,在战略布局.发展能力.市场份额等 ...

  8. 童年经典回忆 | 从零开始带大家用Python撸一个魔塔小游戏呀(1)

    相关文件 相关游戏素材(图片和音频等)源于网络,侵歉删. 需要源代码的小伙伴私信小编,或者关注小编的公众号[Python日志] 开发工具 Python版本:3.7.4 相关模块: pygame模块: ...

  9. 一文带你全面了解,自动驾驶数据闭环之——大数据管理

    推荐 |焉知智能汽车 作者 | 高工(汽车主机厂ADAS研发人员)  来源 | 无人驾驶俱乐部 知圈 | 进"计算平台群"请加微yanzhi-6,备注计算 数据闭环涉及较多领域,后 ...

最新文章

  1. 输入列号得到excel对应的字母列
  2. jetty 切换log4j日志接口
  3. 深入理解Delete(JavaScript)
  4. python读取配置文件存在某配置_Python读取ini配置文件的方式
  5. 【读书笔记】-串指令备注
  6. ASP.Net缓存总结
  7. 【时间管理法】用三个学期拿双学位,还不耽误睡眠和社交
  8. 属性匹配工具_k8s包管理工具Kustomize实战手册
  9. axure购物车加减实现
  10. 模板匹配之zernike矩
  11. 嵌入式系统开发快速体验
  12. python的sift算法_opencv python SIFT(尺度不变特征变换)
  13. 14个新鲜的免费图标集
  14. mysql phpwind_php+mysql及phpwind和wordpress的安装配置
  15. 实现Typora多端同步
  16. Lua实现简单的任务动画移动(Animator)
  17. python绘制笛卡尔直角坐标系
  18. 简单的购物车和购物车结算
  19. Umeng—新浪登录问题
  20. Linux电源管理(一)电源管理系统架构

热门文章

  1. 常见计算机从零开始 C.文字处理(转)
  2. 数据科学必备Pandas数据预处理方法汇总
  3. python加粗_python 加粗
  4. 只需5秒,快速完成电脑大文件复制的技巧
  5. ​脑机接口(BCI)与人工智能:仅用思想来控制周围事物是什么感觉?
  6. 虚拟机VMware怎么完全卸载干净
  7. java什么是栈和堆_JAVA中的栈和堆
  8. 聪明的人都有这些思维格局
  9. Ubuntu 14.04 wubi 硬盘安装 ~ linux小白
  10. 软件质量测试决策表和判定表,黑盒测试技术(Decision Tables 决策表法,又称判定表法)软件质量保证与测试...