当前位置: 首页 > news >正文

【自然语言处理】实验三:新冠病毒的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&#xff1a;进行问题/问题列表处理&#xff08;正则化&#xff0c;分词&#xff09; 1.3功能模块3&#xff1a;处理输入的问题 1.4功能模块4&#xff1a;计算输入问题与问题…...

「C++系列」文件和流

【人工智能教程】&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站&#xff1a;【人工智能教程】 文章目录 一、文件和流1. 文件操作① 打开文件② 读写文件 2. 流操作 二、应…...

视频美颜SDK核心功能解析:打造高效直播美颜工具方案详解

随着直播行业的迅猛发展&#xff0c;用户对于直播画质和个人形象的要求越来越高。视频美颜SDK作为一项关键技术&#xff0c;已经成为各大直播平台和短视频应用的重要组成部分。通过实时美颜技术&#xff0c;用户能够在直播过程中呈现出更加理想的形象&#xff0c;从而提升直播体…...

深入解析:高性能 SSE 服务器的设计与实现

在当今的实时 Web 应用中&#xff0c;服务器发送事件&#xff08;Server-Sent Events&#xff0c;SSE&#xff09;技术扮演着越来越重要的角色。今天&#xff0c;我们将深入探讨一个用 Go 语言实现的高性能 SSE 服务器的设计和实现细节。这个服务器不仅能够处理大量并发连接&am…...

C#为任意组件开发登录功能的记录

非常简单&#xff0c;直接给出代码&#xff1a; 数据库操作类 这个无需多言就是简单的包含了数据操作的内容&#xff0c;允许你在这一个类中写完关于本地数据库或者云数据库操作的逻辑&#xff0c;与登录逻辑分开哦。 注意&#xff0c;如果你的软件要给别人运行使用&#xf…...

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考&#xff1a;https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似&#xff0c;右侧展示效果和代码 https://pagen.so/...

2024新动态:低代码开发占领新常态市场

随着技术的不断进步和数字化转型的加速&#xff0c;企业对于快速开发和部署应用程序的需求日益增长。2024年&#xff0c;低代码开发平台已经成为新常态市场的重要力量&#xff0c;它通过简化应用程序的开发过程&#xff0c;让非技术背景的业务用户也能参与到软件开发中来&#…...

【SQL 用大白话描述事务并发 可能会遇到的问题】及解决策略

在SQL数据库中,当多个事务同时进行时,可能会出现并发事务问题。这些问题通常包括以下几种: 首先,我们要清楚一点,这些问题都是与事务的四大特性之一的隔离性有关。并且通常发生在并发事务场景中。 脏读(Dirty Read): 脏读发生在一个事务读取了另一个事务未提交的数据。…...

nginx安装及vue项目部署

安装及简单配置 在usr/local下建好nginx文件夹&#xff0c;下载好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&#xff08;上&#xff09;1. Sequence to Sequence(Seq 2 Seq&#xff0c;序列到序列模型) 的应用2. Transformer的结构2.1 Transformer encoder&#xff08;Transformer 编码器&#xff09; 二、Pytorch学习1. 网络模型…...

HarmonyOS学习(十三)——数据管理(二) 关系型数据库

文章目录 1、基本概念2、运行机制3、默认配置与限制4、接口说明5、实战&#xff1a;开发“账本”5.1、创建RdbStore5.2、创建数据库5.3、增加数据5.4、删除数据5.5、修改数据5.6、查询数据5.7、备份数据库5.8、恢复数据库5.9、删除数据库 官方文档地址&#xff1a; 通过关系型…...

【工具变量】科技金融试点城市DID数据集(2000-2023年)

时间跨度&#xff1a;2000-2023年数据范围&#xff1a;286个地级市包含指标&#xff1a; year city treat post DID&#xff08;treat*post&#xff09; 样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff1a; 参考文献-pdf格式&#xff1a;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 参考自&#xff1a;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

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;困难&#xff09;&#xff1a; 统计特殊整数 如果一个正整数每一个数位都是 互不相同 的&#xff0c;我们称它是 特殊整数 。 给你一个 正 整数 n &#xff0c;请你返回区间 …...

浅谈计算机视觉的学习路径1

计算机视觉&#xff08;Computer Vision, CV&#xff09;是人工智能领域的一个重要分支&#xff0c;它的目标是使计算机能够像人类一样理解和处理图像和视频数据。 面向想要从事该方向的大学生&#xff0c;笔者这里给出以下是关于计算机视觉的学习路径建议&#xff1a; 简要了解…...

VScode C语言中文乱码问题解决

&#x1f389; 前言 省流&#xff1a;这不是正经的教学&#xff0c;纯属是作者弱智操作导致的乱码问题&#xff0c;绝不是是什么配置原因导致的。 &#x1f389; 问题描述 贴一下我写的C语言代码&#xff08;太久没写了&#xff0c;最近学数据结构才拾起来&#xff09; #in…...

安全基础学习-AES128加密算法

前言 AES&#xff08;Advanced Encryption Standard&#xff09;是对称加密算法的一个标准&#xff0c;主要用于保护电子数据的安全。AES 支持128、192、和256位密钥长度&#xff0c;其中AES-128是最常用的一种&#xff0c;它使用128位&#xff08;16字节&#xff09;的密钥进…...

Python 项目实践:文件批量处理

Python 项目实践&#xff1a;文件批量处理 文章目录 Python 项目实践&#xff1a;文件批量处理一 背景二 发现问题三 分析问题四 解决问题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…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...