使用Redis进行搜索

文章目录

  • 构建反向索引


构建反向索引

在Begin-End区域编写 tokenize(content) 函数,实现文本标记化的功能,具体参数与要求如下:

方法参数 content 为待标记化的文本;
文本标记的实现:使用正则表达式提取全小写化后的文本中长度 >= 2 的英文单词,并将这些标记词依次记录到标记词集合中;
返回标记词的实现:返回(return)标记词集合。
编写 index_document(content) 函数,实现构建反向索引的功能,具体参数与要求如下:

方法参数 content 为待构建索引的文本;
分配文本序号的实现:对计数器content:id递增1,并将递增后的值作为该文本的序号;
记录文本全文的实现:将文本作为值,上一步的序号做为域存入到哈希键 contents 中;
获取文本标记词的实现:使用 tokenize 方法获取该文本的所有标记词;
建立索引的实现:遍历所有标记词,使用事务一次性对每个word创建一个名为keyword:{word}的集合,并将该文本的序号加入到该集合中。
代码如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-import re
import redisconn = redis.Redis()# 文本序列化
def tokenize(content):# 请在下面完成要求的功能#********* Begin *********#words = re.findall(r'\b[a-z]{2,}\b', content.lower())return set(words)#********* End *********## 创建文本的反向索引
def index_document(content):# 请在下面完成要求的功能#********* Begin *********#doc_id = conn.incr("content:id")conn.hset("contents", doc_id, content)words = tokenize(content)for word in words:pipe = conn.pipeline(True)key = "keyword:" + wordpipe.sadd(key, doc_id)pipe.execute()#********* End *********#

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/315343.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openssl 命令详解

openssl genrsa 命令产生私钥 openssl genrsa 命令是会用来生成 RSA 私有秘钥,不会生成公钥,因为公钥提取自私钥。生成时是可以指定私钥长度和密码保护。 如果需要查看公钥或生成公钥,可以使用 openssl rsa 命令。 命令语法: ope…

华为交换机入门(六):VLAN的配置

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接互通,从而将广播报文限制在一个VLAN内。 VLAN 主要用来解决如何…

案例分享:Qt多国语言输入法软键盘

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/135346374 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

一文带你了解,AGV和AMR有哪些区别和功能

AGV(Automated Guided Vehicle)和AMR(Autonomous Mobile Robot)是两种自动化移动设备,它们在某些方面相似,但也存在一些关键区别。 1、导航技术: AGV: AGV通常使用预先定义的路径或…

【C++】浅拷贝 / 深拷贝 / 写时拷贝

文章目录 1. 经典的string类问题2. 浅拷贝3. 深拷贝3.1 传统写法的String类3.2 现代写法的String类 4. 写时拷贝 1. 经典的string类问题 上一篇博客已经对string类进行了简单的介绍,大家只要能够正常使用即可。 链接:【C】string 在面试中,面…

什么是边缘计算:最全指南

什么是边缘计算 边缘计算是一个流行语,如云、物联网和人工智能。简单地说,边缘计算带来了网络的去中心化。边缘计算是即将到来的技术增强和进步。“边缘”一词的字面含义是地球上以分布式方式提供服务的地理位置。 边缘计算是一种分布式计算系统&#…

时隔五天,重温Redis基础总结

目录 字符串操作命令 Redis 字符串类型常用命令SET key value 设置指定key的值 ​编辑GET key 获取指定key的值 ​编辑SETEX key seconds value 设置指定key的值,并将 key 的过期时间设为 seconds 秒 SETNX key value 只有在key不存在时设置key的值 哈希操作命…

C语言---扫雷(Minesweeper)

扫雷 1 了解扫雷游戏1.1 基本规则1.2 基础知识1.2.1字符相减 2 实现过程1.1 棋盘设定1.2 初始化棋盘1.3 打印棋盘1.4 放置雷1.5 排查雷1.6 game()函数 3 完整代码3.1 Minesweeper.h3.2 Minesweeper.c3.3 Test.c 4 参考 1 了解扫雷游戏 点击右侧进入扫雷游戏网页版 1.1 基本规…

typescript,eslint,prettier的引入

typescript 首先用npm安装typescript,cnpm i typescript 然后再tsc --init生成tsconfig.json配置文件,这个文件在package.json同级目录下 最后在tsconfig.json添加includes配置项,在该配置项中的目录下,所有的d.ts中的类型可以在…

Linux 系统拉取 Github项目

一、安装Git 在Linux上拉取GitHub项目可以使用Git命令。首先确保已经安装了Git。如果没有安装,可以通过包管理器(比如apt、yum)来进行安装。 sudo yum install git #查看安装版本 git -version二、关联GitHub 配置本地账户和邮箱 >>…

【我与CSDN的128天】相识相知相守

目录: 相识相知相守 相识 为什么选择写博客? 写博客的目的,我觉得是因为想要记录。记录学习的过程,整理学过的知识,方便今后的复习。 更重要的是热爱分享,分享给别人知识也是一种快乐。 在某一瞬间教会某一个你不认识的人,难道不是一个很酷的事情吗? 为什么选择CSDN? 作…

《深入理解JAVA虚拟机笔记》对象的创建和访问、对象头

对象的创建 当 Java 虚拟机遇到一条字节码 new 指令时,首先将去检查这个指令的参数是否能做常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 在类加载…