智能信息检索:布尔查询

 函数介绍:

本次实验利用了上一次实验构建成功的倒排表

send为评测提交函数

and_search为AND逻辑布尔查询

and_search_sort增添了相关度排序的功能

mul_search函数接受不同参数来确定查询的逻辑

test支持用户手动输入测试

代码实现:

bool_search.py

import json
import requests
def send():f=open(r'xxx.txt',"rb")files={'file':f}r=requests.post(url="http://121.37.1.35:5001/detectfile",files=files)print(r.text)
def and_search(query_str, inverted_index):# 初始化结果集,它将存储包含所有查询词项的文档IDquery_words=query_str.split()result_docs = None# 遍历每个查询词项for word in query_words:# 获取当前词项的文档集合word_docs = set(doc_id for doc_id, _ in inverted_index[word]['tf_list'])# 如果是第一个词项,初始化结果集if result_docs is None:result_docs = word_docselse:# 取交集以保留只包含所有词项的文档result_docs &= word_docs# 如果在任何点结果集为空,可以提前结束搜索if not result_docs:break# 将结果集转换为文档ID列表result_doc_ids = list(result_docs)return result_doc_idsdef read_index():"""示例使用inverted_index 是倒排索引,格式如下:{'词1': {'df': 2, 'tf_list': [[1, 2], [2, 1]]},'词2': {'df': 1, 'tf_list': [[1, 1]]},}"""file_path = r"E:\Procedure\Project\IR\inverted_index.json"file_path='inverted_index.json'inverted_index = {}with open(file_path, 'r', encoding='utf-8') as file:for line in file:record = json.loads(line)if record:key, value = record.popitem()  # 获取字典中的第一对键值对inverted_index[key] = valuereturn inverted_indexdef and_search_sort(query_str,inverted_index):# 将查询字符串按空格分割成词项列表query_words = query_str.split()# 初始化一个字典来存储每个文档的总词频doc_frequencies = {}# 计算每个文档的总词频for word in query_words:t_freq={}for tf_list in inverted_index.get(word, {}).get('tf_list', []):if tf_list:doc_id,tf=tf_list[0],tf_list[1]t_freq[doc_id]=tfif not doc_frequencies:doc_frequencies.update(t_freq)continuedt={}for key,value in doc_frequencies.items():if(t_freq.get(key,None)):dt[key]=value+t_freq[key]doc_frequencies=dt# 根据总词频对文档进行排序sorted_doc_frequencies = sorted(doc_frequencies.items(),key=lambda item:item[1],reverse=True)# 提取排序后的文档ID列表sorted_doc_ids = [doc_id for doc_id, _ in sorted_doc_frequencies]return sorted_doc_idsdef read_query():file='query-2024.txt'index=read_index()res=[]with open(file,'r',encoding='gbk')as file:#每一行为一条查询for line in file:#返回一个列表search_results=and_search_sort(query_str=line,inverted_index=index)search_str=[str(doc_id) for doc_id in search_results]re_str='\t'.join(search_str)res.append(re_str)path= 'xxx.txt'with open(path,'w',encoding='utf-8')as file:for string in res:file.write(string)file.write('\n')#read_query()
#send()

增加OR逻辑与Not逻辑:

import bool_search
all_docs=set(range(1,44973))
def mul_search(query_words,inverted_index,condition):result_docs=Nonefor word in query_words.split():word_docs = set(doc_id for doc_id, _ in inverted_index[word]['tf_list'])if result_docs is None:result_docs = word_docselse:if condition == "AND":result_docs &= word_docselse:result_docs |= word_docs# 可以添加NOT操作的处理if condition=="AND" or condition=="OR":return list(result_docs)else:return all_docs-result_docsdef test():inverted_index = bool_search.read_index()condition=input("输入查询类型:")query_words=input()res=mul_search(query_words,inverted_index,condition)print(res)return
test()

优化:

测试时,一定要先读入倒排表,再读取用户的输入,否则倒排表读取时间较久,影响用户体验。

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

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

相关文章

Sharding-JDBC分库分表之SpringBoot主从配置

Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 前言 在开发中,如果对数据库的读和写都在一个数据服务器中操作,面对日益增加的访问量&#x…

解锁算力新极限,Xilinx UltraScale+赋能的高性能低延时FPGA加速卡

01、产品概述 AiHPC-V9P 是一款基于 AMD Virtex UltraScale FPGA VU9P 的 PCIe Gen3.0 x16 接口智能网卡,具有最大2*200GbE /或者16*10GbE(典型应用)接入容量的高性能低延时智能网卡。 对外接口支持两组QSFP-DD 最高25Gb/s x8Lane 光口接入&#xf…

数据库系统概论 | MySQL | 数据定义 | 单表查询 | 嵌套查询 | 连接查询 | 带有谓词的查询

数据定义 模式的定义与删除 定义模式与删除模式: CREATE SCHEMA S_C_SC; DROP SCHEMA S_C_SC;进入模式: USE S_C_SC;建立学生表: CREATE TABLE Student (Sno CHAR(8) PRIMARY KEY, Sname VARCHAR(20) UNIQUE, Ssex CHAR(6), Sbirthdate …

【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则

大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言1、无法链接…

分享四款常见的内网穿透工具

本文精心筛选了四款业内领先的内网穿透解决方案:巴比达、花生壳、Frp及NatApp,旨在全面展现它们在安全、便捷与灵活性方面的独到之处,尤其是对花生壳、Frp和NatApp进行了详尽补充,以帮助读者更好地理解这些工具的内在价值。 1. 巴…

北斗防爆手持终端在化工厂的安全性能分析

北斗防爆手持终端在化工厂中的应用显著提升了安全性能,其卓越的防爆设计、高精度定位与监控功能、实时通信能力以及多功能集成特性,共同构筑了化工厂安全生产的坚实防线,确保了巡检人员与设备在复杂环境下的安全作业与高效管理。 北斗防爆手持…

AE-图层

目录 图层初体验 项目、合成和图层的关系 图层的通用参数 锚点(快捷键A) 位置(快捷键P) 缩放(快捷键S) 旋转(快捷键R) 不透明度(快捷键T) 向后平移锚…

实时监测、智能预警:电缆光纤测温系统|原理、应用与前景

实时监测、智能预警:电缆光纤测温系统|原理、应用与前景 电缆光纤测温系统,作为现代电力系统中不可或缺的一部分,以其独特的优势在电缆安全监控领域发挥着日益重要的作用。该系统利用光纤传感技术,实时监测电缆的运行温度&#x…

网站高性能架构设计——高性能缓存架构

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、缓存基础 1.缓存简介 缓存提升性能的幅度,不只取决于存储介质的速度,还取决于缓存命中率。为了提高命中 率&#xff0c…

【博主推荐】HTML5好看的酷酷的个人简历、个人主页、个人网站源码

文章目录 1.设计来源1.1 主界面1.2 关于我界面1.3 我的项目界面1.4 我的经验界面1.5 我的技能界面1.6 我的文章界面1.7 联系我界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeig…

智能猫砂盆怎么买才不踩雷?2024热门的三款智能猫砂盆分享!

上班外出来不及铲屎怎么办?那当然是入手一个智能猫砂盆啦。实不相瞒,以前我也是被手动铲屎长期折磨的可怜铲屎官,但上班出差哪有空一直盯着猫砂盆看呢?索性后面一不做二不休直接购入了智能猫砂盆。如果你也想将家里的普通猫砂盆换…

1. Go 九九乘法表

方式一 package mainimport "fmt"func main() {// Iterate over the rows (1 to 9)for row : 1; row < 9; row {// Iterate over the columns (1 to row)for col : 1; col < row; col {// Calculate the productproduct : row * col// Print the productfmt.P…

如何让 3D 数字孪生场景闪闪发光

今日图扑软件功能分享&#xff1a;我们将探讨 HT 系统如何通过分组管理灯光、裁切体和流光&#xff0c;以提高场景光影效果的精准度和整体可控性。 HT 中的灯光、裁切体、流光是会影响它所在区域一定范围内的其他节点的表现&#xff0c;如 场景中有个 A 灯光&#xff0c;默认情…

阿里云登陆Centos7

用自己电脑登陆Centos7太麻烦了&#xff0c;还要自己弄个虚拟机&#xff0c;一个电脑里面既有WIN又有LINUX&#xff0c;索性直接买个阿里云服务器&#xff0c;来学习Centos7。 购买 我是新用户&#xff0c;可以试用3个月&#xff0c;先用个3个月再说哈哈哈。 一系列操作之后…

CH-benCHmark:一个HTAP数据库测试基准

在数据库领域&#xff0c;标准化且广泛采用的性能测试往往聚焦于操作性或实时业务智能(BI)任务&#xff0c;然而&#xff0c;这类测试缺少对混合型工作负载的考量。鉴于此&#xff0c;CH-benCHmark提出了一种复杂的混合负载基准测试。 这一基准测试&#xff0c;旨在弥合TPC-C&…

vue-路由自动化

Router 介绍 工程中的Router会根据src/views目录结构自动生成路由配置&#xff0c;路由结构与文件系统结构保持一致&#xff0c;不需要手动编写routes [...]&#xff0c;使得项目结构更加直观和易于理解。 配置 配置文件&#xff1a; router└─ index.tsimport {createRou…

mybatis用注解替换xml,不再写.xml了

在Service里引用Autowiredprivate DemoMapper demoMapper;下面展示一些 DemoMapper.java代码片。 public interface DemoMapper{/*** 查询页面信息-根据ID*/Select("select * from program where id #{id}")Program getById(Long id);/*** 新增*/Insert({"<…

电竞玩家的云端盛宴!四大云电脑平台:ToDesk、顺网云、青椒云、极云普惠云实测大比拼

本文目录 一、云电脑概念及市场需求二、云电竞性能测试2.1 ToDesk云电脑2.2 顺网云2.3 青椒云2.4 极云普惠云电脑 三、四大云电脑平台综合配置对比3.1 CPU处理器3.2 GPU显卡3.3 内存 四、总结 一、云电脑概念及市场需求 在数字化时代的推动下&#xff0c;云计算技术日益成熟&a…

关于嵌入式系统中的LED控制程序的一篇爽文

嵌入式系统中的LED控制程序 在嵌入式系统中控制LED是一个很常见的任务&#xff0c;可以用于指示状态、显示信息等。我们将使用C语言编写一个简单的LED控制程序&#xff0c;该程序将控制一个虚拟的LED&#xff0c;但可以根据需要将其扩展到实际的硬件上。 准备工作 在开始之前…

深入理解 Cowboy WebSocket:使用 Erlang/OTP 构建高效的即时通讯(IM)应用

深入理解 Cowboy WebSocket&#xff1a;使用 Erlang/OTP 构建高效的即时通讯(IM)应用 引言 实时通信技术在现代 Web 应用中扮演着核心角色&#xff0c;而 WebSocket 作为其中的关键技术&#xff0c;已成为即时通讯(IM)系统不可或缺的一部分。Cowboy&#xff0c;这个基于 Erla…