【自然语言处理】实验三:新冠病毒的FAQ问答系统

目录
前言
1.新建data_process.py
1.1导入包并定义功能模块1用来读取问题和答案FAQ的文件
1.2功能模块2:进行问题/问题列表处理(正则化,分词)
1.3功能模块3:处理输入的问题
1.4功能模块4:计算输入问题与问题列表之间的余弦相似度,选出相似度最大的问题的索引
2.新建faq_test.py
2.1获取问题列表和答案列表并对问题列表进行预处理
2.2进行FAQ问答系统测试
2.3结果展示
总结
🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。
💡本文由Filotimo__✍️原创,首发于CSDN📚。
📣如需转载,请事先与我联系以获得授权⚠️。
🎁欢迎大家给我点赞👍、收藏⭐️,并在留言区📝与我互动,这些都是我前进的动力!
🌟我的格言:森林草木都有自己认为对的角度🌟。

前言
在信息时代,智能问答系统的应用越来越广泛,尤其是在疫情信息传播中,这类系统的作用尤为重要。
实验步骤:(新冠病毒的FAQ问答系统源码以及配套文件资源已上传)
1.新建data_process.py
1.1导入包并定义功能模块1用来读取问题和答案FAQ的文件
import re
import jieba
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
def read_corpus(file):with open(file, encoding='utf-8') as f:list = []lines = f.readlines()for i in lines:list.append(i)return list
`read_corpus` 函数负责从指定的文件中读取问题或答案。我们利用 `open` 函数打开文件,并逐行读取内容。每行内容被添加到列表中并最终返回。这一模块的功能比较简单,但它为后续的数据处理奠定了基础。
1.2功能模块2:进行问题/问题列表处理(正则化,分词)
def get_question_list(questions):if len(questions) == 1: new_sent = re.sub(r'[^\w]', '', questions[0])new_sent = ''.join(e for e in new_sent if e.isalnum())new_sent = ' '.join(jieba.lcut(new_sent))return new_sentelse:question_list = []for sentence in questions: new_sent = re.sub(r'[^\w]', '', sentence)new_sent = ''.join(e for e in new_sent if e.isalnum())seg_list = ' '.join(jieba.lcut(new_sent))question_list.append(seg_list)return question_list
`get_question_list` 函数负责对问题进行正则化和分词处理。正则化过程主要是去除标点符号和非字母数字字符。分词则是将连续的文本拆分成有意义的词汇,这里使用了 `jieba` 库进行中文分词处理。根据输入的参数,函数可以处理单个问题或多个问题列表。
1.3功能模块3:处理输入的问题
def input_question_process(questions_list, input_ques):questions_list_use = questions_list.copy()input_ques = [input_ques]input_question = get_question_list(input_ques)questions_list_use.append(input_question)vectorizer = TfidfVectorizer()vectorizer_related_ques = vectorizer.fit_transform(questions_list_use)return vectorizer_related_ques
在 `input_question_process` 函数中,我们首先将用户输入的问题与已有的问题列表进行整合。然后使用 `TfidfVectorizer` 将文本转化为 TF-IDF 向量表示。TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征提取方法,它可以反映词汇在文档中的重要性。
1.4功能模块4:计算输入问题与问题列表之间的余弦相似度,选出相似度最大的问题的索引
def ques_idx_cosine_sim(input_ques, questions):score = []input_ques = (input_ques.toarray())[0]for question in questions:question = question.toarray()num = float(np.matmul(question, input_ques))denom = np.linalg.norm(question) * np.linalg.norm(input_ques)cos = num / (denom + 1e-3)score.append(cos)if max(score) < 0.1:print('对不起,本FAQ库中暂时没有与您的提问相关的内容,我们将努力改进!')else:best_idx = score.index(max(score))return best_idx
`ques_idx_cosine_sim` 函数计算用户输入的问题与问题列表中所有问题之间的余弦相似度。余弦相似度是衡量两个向量相似度的一种方法,它值域在 [-1, 1] 之间,值越大表示相似度越高。我们使用 `numpy` 库中的线性代数操作计算相似度,并从中选择最相似的问题索引。
2.新建faq_test.py
在faq_test.py部分,会将前面的功能模块整合,完成了一个简单的 FAQ 问答系统。系统的运行步骤如下:
1. 从文件中读取问题和答案。
2. 对问题进行预处理,得到处理后的问题列表。
3. 循环接收用户输入的问题,对输入问题进行处理,并计算其与 FAQ 问题的相似度。
4. 根据相似度选择最匹配的问题,并输出对应的答案。
2.1获取问题列表和答案列表并对问题列表进行预处理
questions = read_corpus('./data/questions.txt')
answers = read_corpus('./data/answers.txt')questions_list = get_question_list(questions)
2.2进行FAQ问答系统测试
print('欢迎您使用FAQ问答系统...')
while True:input_ques = input('请输入您需要了解的新冠病毒问题(输入q退出系统):\n')if input_ques == 'q':print('谢谢您的关注!')breakelse:ques_process = input_question_process(questions_list, input_ques)print('正在FAQ库中寻找答案,请稍等...')answer_idx = ques_idx_cosine_sim(ques_process[-1], ques_process[0:-1])if answer_idx is not None:print('亲,我们给您找到的答案如下: \n', answers[answer_idx])print('FAQ库中相似的问题:', questions[answer_idx])
2.3结果展示


总结
通过此次实验,我们成功构建了一个基于 Python 的新冠病毒 FAQ 问答系统。该系统实现了文本预处理、向量化、相似度计算等核心功能,能够有效地为用户提供相关的答案。
相关文章:
【自然语言处理】实验三:新冠病毒的FAQ问答系统
目录 前言 1.新建data_process.py 1.1导入包并定义功能模块1用来读取问题和答案FAQ的文件 1.2功能模块2:进行问题/问题列表处理(正则化,分词) 1.3功能模块3:处理输入的问题 1.4功能模块4:计算输入问题与问题…...
「C++系列」文件和流
【人工智能教程】,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站:【人工智能教程】 文章目录 一、文件和流1. 文件操作① 打开文件② 读写文件 2. 流操作 二、应…...
视频美颜SDK核心功能解析:打造高效直播美颜工具方案详解
随着直播行业的迅猛发展,用户对于直播画质和个人形象的要求越来越高。视频美颜SDK作为一项关键技术,已经成为各大直播平台和短视频应用的重要组成部分。通过实时美颜技术,用户能够在直播过程中呈现出更加理想的形象,从而提升直播体…...
深入解析:高性能 SSE 服务器的设计与实现
在当今的实时 Web 应用中,服务器发送事件(Server-Sent Events,SSE)技术扮演着越来越重要的角色。今天,我们将深入探讨一个用 Go 语言实现的高性能 SSE 服务器的设计和实现细节。这个服务器不仅能够处理大量并发连接&am…...
C#为任意组件开发登录功能的记录
非常简单,直接给出代码: 数据库操作类 这个无需多言就是简单的包含了数据操作的内容,允许你在这一个类中写完关于本地数据库或者云数据库操作的逻辑,与登录逻辑分开哦。 注意,如果你的软件要给别人运行使用…...
AI免费UI页面生成
https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考:https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似,右侧展示效果和代码 https://pagen.so/...
2024新动态:低代码开发占领新常态市场
随着技术的不断进步和数字化转型的加速,企业对于快速开发和部署应用程序的需求日益增长。2024年,低代码开发平台已经成为新常态市场的重要力量,它通过简化应用程序的开发过程,让非技术背景的业务用户也能参与到软件开发中来&#…...
【SQL 用大白话描述事务并发 可能会遇到的问题】及解决策略
在SQL数据库中,当多个事务同时进行时,可能会出现并发事务问题。这些问题通常包括以下几种: 首先,我们要清楚一点,这些问题都是与事务的四大特性之一的隔离性有关。并且通常发生在并发事务场景中。 脏读(Dirty Read): 脏读发生在一个事务读取了另一个事务未提交的数据。…...
nginx安装及vue项目部署
安装及简单配置 在usr/local下建好nginx文件夹,下载好nginx-1.26.2.tar.gz压缩文件.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel gcc、gcc-c # 主要用来进行编译相关使用 openssl、ope…...
第十三周:机器学习笔记
第十三周周报 摘要Abstract一、机器学习——Transformer(上)1. Sequence to Sequence(Seq 2 Seq,序列到序列模型) 的应用2. Transformer的结构2.1 Transformer encoder(Transformer 编码器) 二、Pytorch学习1. 网络模型…...
HarmonyOS学习(十三)——数据管理(二) 关系型数据库
文章目录 1、基本概念2、运行机制3、默认配置与限制4、接口说明5、实战:开发“账本”5.1、创建RdbStore5.2、创建数据库5.3、增加数据5.4、删除数据5.5、修改数据5.6、查询数据5.7、备份数据库5.8、恢复数据库5.9、删除数据库 官方文档地址: 通过关系型…...
【工具变量】科技金融试点城市DID数据集(2000-2023年)
时间跨度:2000-2023年数据范围:286个地级市包含指标: year city treat post DID(treat*post) 样例数据: 包含内容: 全部内容下载链接: 参考文献-pdf格式:https://…...
import torch import torchIllegal instruction的可能解决方法
It is numpy 1.19.5 issue. You can fix it by installing previous minor version. pip3 install numpy1.19.4 参考自:Illegal instruction (core dumped) - Jetson & Embedded Systems / Jetson TX2 - NVIDIA Developer Forums...
[SDX35+WCN6856]SDX35 + WCN6856 WiFi导致系统crash问题分析及解决方案
SDX35 SDX35介绍 SDX35设备是一种多模调制解调器芯片,支持 4G/5G sub-6 技术。它是一个4nm芯片专为实现卓越的性能和能效而设计。它包括一个 1.9 GHz Cortex-A7 应用处理器。 SDX35主要特性 ■ 3GPP Rel. 17 with 5G Reduced Capability (RedCap) support. Backward compati…...
力扣题解2376
大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述(困难): 统计特殊整数 如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一个 正 整数 n ,请你返回区间 …...
浅谈计算机视觉的学习路径1
计算机视觉(Computer Vision, CV)是人工智能领域的一个重要分支,它的目标是使计算机能够像人类一样理解和处理图像和视频数据。 面向想要从事该方向的大学生,笔者这里给出以下是关于计算机视觉的学习路径建议: 简要了解…...
VScode C语言中文乱码问题解决
🎉 前言 省流:这不是正经的教学,纯属是作者弱智操作导致的乱码问题,绝不是是什么配置原因导致的。 🎉 问题描述 贴一下我写的C语言代码(太久没写了,最近学数据结构才拾起来) #in…...
安全基础学习-AES128加密算法
前言 AES(Advanced Encryption Standard)是对称加密算法的一个标准,主要用于保护电子数据的安全。AES 支持128、192、和256位密钥长度,其中AES-128是最常用的一种,它使用128位(16字节)的密钥进…...
Python 项目实践:文件批量处理
Python 项目实践:文件批量处理 文章目录 Python 项目实践:文件批量处理一 背景二 发现问题三 分析问题四 解决问题1 找到所有文件2 找到文件特定字段3 找出复杂的字符串4 替换目标字符串5 验证文件是否正确 五 总结六 完整代码示例七 源码地址 本项目旨在…...
jsonschema - 校验Json内容和格式
1、创建对象 from pydantic import BaseModel from typing import Listclass Person(BaseModel):name: strage: intclass Student(Person): level: int 16friends: List[Person] 2、生成 schema schema Student.model_json_schema()内容如下 {$defs: {Person: {propertie…...
新能源车轻量化为什么开始盯上高强镁合金?
续航,是悬在每一台纯电动汽车头上的达摩克利斯之剑。多充一度电、多堆一些正极材料,是一条路;但还有另一条路——把车造得更轻。 SAE(美国汽车工程师学会)的测算已经被反复引用:整车每减重100千克ÿ…...
OmenSuperHub:释放惠普游戏本性能的纯净开源控制中心
OmenSuperHub:释放惠普游戏本性能的纯净开源控制中心 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为官方…...
车载诊断系统(OBD)的原理、演进与未来
本文约8,167字,建议收藏阅读 作者 | 北湾南巷 出品 | 汽车电子与软件 引 言 在现代汽车中,越来越多的故障不再表现为明显的机械损坏,而是以“亮灯”“报码”“性能异常”等电子信号的形式出现。发动机为什么亮起故障灯?排放是否达…...
如何在浏览器中一键解密所有加密音乐文件:Unlock-Music完全指南
如何在浏览器中一键解密所有加密音乐文件:Unlock-Music完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地…...
3分钟开启PC游戏分屏派对:NucleusCoop让单机游戏秒变多人同屏神器
3分钟开启PC游戏分屏派对:NucleusCoop让单机游戏秒变多人同屏神器 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 还在为热门PC游戏不支…...
在线文档协作工具选型必看:14款产品对比(2026版)
一、在线文档协作工具的概念解析及其核心功能 在线文档协作工具是基于云端的文档创建、编辑、共享与协同沟通平台,核心目标是让团队在同一份资料上“实时共同工作”,减少反复传文件、版本混乱与沟通成本。 企业常见的核心能力包括: 多人实…...
DeepSeek模型微调全链路解析:从数据准备、LoRA配置到推理部署的7大关键步骤
更多请点击: https://intelliparadigm.com 第一章:DeepSeek模型微调全链路概览 DeepSeek系列大语言模型(如DeepSeek-V2、DeepSeek-Coder)凭借其开源特性、高性能推理能力与丰富的领域适配性,已成为工业界与学术界微调…...
【DeepSeek漏洞扫描辅助实战指南】:20年安全专家亲授3大避坑法则与5步提效流程
更多请点击: https://intelliparadigm.com 第一章:DeepSeek漏洞扫描辅助的核心价值与适用边界 DeepSeek漏洞扫描辅助并非通用型渗透测试引擎,而是一个聚焦于大语言模型(LLM)应用层安全的轻量级分析工具。其核心价值在…...
Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间
Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾为Windows系统越来越慢而烦…...
别再纠结了!给激光焊接新手讲透单模和多模激光到底怎么选(附M²因子解读)
激光焊接设备选型指南:单模与多模激光的实战抉择 当你第一次站在激光焊接设备采购的十字路口,面对"单模"和"多模"这两个专业术语时,那种迷茫感我深有体会。五年前,我作为产线技术负责人,需要为汽车…...

