问答系统数据预处理(源码)

本文介绍了一个问答系统的构建过程,包括问题与答案的拆分、文本预处理、词向量化及相似度计算等关键技术环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搭建问答系统的步骤:
一 . 首先对问答库进行拆分,将文本分别拆分为问题库和答案库
源码:
import json
from matplotlib import pyplot as plt
import re
import string
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem.porter import PorterStemmer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from queue import PriorityQueue as PQueue
from functools import reduce
def read_corpus():
“”"
读取给定的语料库,并把问题列表和答案列表分别写入到 qlist, alist 里面。 在此过程中,不用对字符换做任何的处理(这部分需要在 Part 2.3里处理)
qlist = [“你多大了?”, “你的性别是?”, “你的妈妈叫什么呢?” …]
alist = [“答案1”, “答案2”, “答案3” …]
务必要让每一个问题和答案对应起来(下标位置一致)
“”"
qlist = []
alist = []
with open(“train-v2.0.json”, ‘r’) as path:
fileJson = json.load(path)
json_list=fileJson[‘data’]
for data_dict in json_list:
for data_key in data_dict:
if data_key==“paragraphs”:
paragraphs_list=data_dict[data_key]
for content_dict in paragraphs_list:
for qas_key in content_dict:
if “qas” == qas_key:
qas_list = content_dict[qas_key]
for q_a_dict in qas_list:
if len(q_a_dict[“answers”]) > 0:
qlist.append(q_a_dict[“question”])
alist.append(q_a_dict[“answers”][0][“text”])
print(qlist)
print(alist)
print(“qlist len:” + str(len(qlist)))
print(“alist len:” + str(len(alist)))
assert len(qlist) == len(alist) # 确保长度一样
return qlist, alist
read_corpus()
语料数据:
train-v2.0.json

问题与答案分开处理结果
[‘When did Beyonce start becoming popular?’]
[‘in the late 1990s’]
[‘When did Beyonce start becoming popular?’, ‘What areas did Beyonce compete in when she was growing up?’]
[‘in the late 1990s’, ‘singing and dancing’]
[‘When did Beyonce start becoming popular?’, ‘What areas did Beyonce compete in when she was growing up?’, “When did Beyonce leave Destiny’s Child and become a solo singer?”]
[‘in the late 1990s’, ‘singing and dancing’, ‘2003’]
二 . 将问题进行文本处理:
1 . 循环遍历问题库里每一个问题
2 . 对每一个问题进行文本处理:
>.首先加载停用词库
>.对问题用nltk分词进行小写化,去停用词,数值归一化后重新加入到一个问题库
*基于规则的中文分词 ,停用词用什么数据结构来存储? 不一样的数据结构会带来完全不一样的效率 去掉出现频率很低的词 找出频率比较高的最,以100分为基准
>.对这个已经处理完的问题库用zipf定律进行词频过滤
3.对输入的问题及进行文本处理
对于用户的输入问题,找到相似度最高的TOP5问题,并把5个潜在的答案做返回
4.将处理好的问题库词向量化(用glove或word2vec,句子词向量化是将词向量相加取平均)后计算问题库向量L2范数
###bert训练词向量这个正在了解中
5.将处理好的输入问题词向量化并计算问题向量L2范数
三 . 建立一个简单的倒排表
利用倒排表的优化。所用到算法也有一个最大的缺点是每一个用户问题都需要跟库里的所有的问题都计算相似度 ,先从库里面找到跟当前的输入类似的问题描述。然后针对于这些candidates问题再做余弦相似度的计算。这样会节省大量的时间。
四 . 利用倒排表计算问题库词向量和输入问题词向量的余弦相似度
五 . 建立优先队列,采用(优先级(余弦相似度),与相似度对应的问题答案下标)(值越小,优先级越大)找出top所对应的答案下标
六 . 根据找出的答案下标到答案库里遍历打印即可

ask2问答系统是以php+MySQL进行开发的php问答系统源码。 ask2问答系统于2016年3月28发布开源,第一个版本V3.0,内置三套PC模板, default默认是百度问答模板 sowenda是高仿360问答的。 soso模板是仿腾讯soso问答界面。 一套wap模板,仿天涯问答的手机版。 pc和wap模板后台设置里自由切换,还可以绑定手机独立二级域名。 强大的搜索功能,支持xunsearch全文检索,seo友好,强大的标签自动识别功能,内置标签库,还有seo相关的优化,无需小白操心。 内置超强采集,好几十个问答网站规则内置,无需编写,支持防采集网站采集,2天采集30万数据不成问题。 ask2问答系统 更新日志: 1、采用全新的ZUI框架开发前端模板,zui基于bootstrap开发,完美兼容bt,并且扩展了更丰富的UI组件. 2、完善细节,从站内检索功能到seo站内聚合,一一做到。 3、支持积分充值,后台可配置支付宝设置,用户中心右侧导航选择积分充值即可。 4、强化编辑器功能,采用百度最新的UEditor编辑器,支持各种图片上传,还可以直接复制图片本地化保存,太完美了。 5、增加用户专栏,文章聚合,专栏展示用户文章,专栏首页随机切换内容,完爆seo,让爬虫每次光顾都能抓取不同内容,收录杠杠的。 6、后台界面大更新,焕然一新,并支持文章和问题百度推送 7、后台增加在线模板管理 8、采集功能进一步强化,支持各种浏览器在线采集,上百个采集规则随便选,上百个,你没看错,各类行业问答网站均包括在内,你不要问百度,搜搜,360问答,知乎这些了,小儿科。 9、完美支持广告投放,后台可以配置。 10、后台支持logo和banner大图配置,无需在繁琐的ftp上传 11、支持各类cms后台配置整合和dz整合,一键搞定 2016年11月1号更新: 1、强化验证码,防止绕过验证码发垃圾数据 2、增加根据用户等级设置不同角色能提问和回答问题数目限制,防止用户恶意发送内容 3、修改部分小bug
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值