手把手教你用Python搭建一个AI智能问答系统
导读:智能问答系统是自然语言处理的一个重要分支。今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统。
本文经授权转自公众号CSDN(ID:CSDNnews)
作者:李秋键
具体的效果如下所示:
下面简单了解下智能问答系统和自然语言处理的概念,智能问答系统是自然语言处理的一个重要分支。现在普遍认为智能问答能够独立解决很多问题,但是必须要承认现在技术所处的初级阶段的性质。也就是说,智能问答系统在现阶段最大的价值在于为客服人员赋能,而并非独立于人自行解决众多目前还有巨大错误率和不确定性的问题。
一旦具有这样的思想基础——通过智能问答系统为客服人员附能,那么将智能问答系统做成一个工具和产品的基础就有了,只有通过产品化、工具化的方式,才能够实现这个预期。
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。
下面开始搭建我们的智能问答系统,首先我们需要导入的库:
import requests
from lxml import etree
import jieba
import re
import sys,time
import os
其中requests库用来向搜索引擎搜索答案,lxml用来获取答案,jieba库用来提取问题以及做出问题分析,re是处理语言的正则匹配库,sys以及time库用来调试输出效果,os模块用来写入文件以搭建模式选择。
我们知道一个真正的语言回答应该是逐字回答的才符合人的回答习惯,下面为了达到语言对话的效果,我们定义一个函数:
def print_one_by_one(text):sys.stdout.write("\r " + " " * 60 + "\r") # /r 光标回到行首sys.stdout.flush() #把缓冲区全部输出for c in text:sys.stdout.write(c)sys.stdout.flush()time.sleep(0.1)
就是用来逐字输出的效果。
下面是真正搭建的部分,为了对语言进行处理,首先我们要加载停用词,去除掉语言中无意义的词,比如“了”,“啊”等等:
stop = [line.strip() for line in open('stopwords.txt',encoding='utf-8').readlines() ]
开始执行的判断输出一下,以及使用者的输入:
print("小智:您好,请问您需要问什么呢(对话(快,慢),可控制输出速度)")
input_word=input("我:")
#默认为慢速
print(input_word)
if input_word == "快":f = open("1.txt", "w")f.write("0")f.close()
elif input_word =='慢':f = open("1.txt", "w")f.write("1")f.close()
下面用Jieba分词,去除掉无用的停用词:
sd=jieba.cut(input_word,cut_all=False)
final=''
for seg in sd:#去停用词print(seg)if seg not in stop :final +=segprocess=final
此时process是仅仅最简单语言的处理结果,为了适应更多语言习惯,使用正则表达式匹配另一种语言习惯,一个“问”时的处理:
#匹配问后面全部内容
pat=re.compile(r'(.*?)问(.*)')
#一个“问”时的处理
try:rel=pat.findall(final)process=rel[0][1]
except:pass
另外再添加语言习惯,两个“问”的处理:
#两个问时的处理
try:rel=pat.findall(final)rel0=rel[0][1]print(rel0)rel1=pat.findall(rel0)process=rel1[0][1]
except:pass
这样输出的效果就可以适应多种语言习惯,为了区分问答句和模式选择句加入判断语句:
print("问题:"+process)
if process=='':print("小智:OK")
在else中使用搜索引擎获取答案,首先使用请求头,百度百科网址:
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}url=requests.get("https://baike.baidu.com/search/word?word="+process,headers=header)
为了防止中文乱码问题,使用编码如下:
#为了防止中文乱码,编码使用原网页编码url.raise_for_status()url.encoding = url.apparent_encoding
下面使用匹配获取内容:
bject=etree.HTML(url.text)print(object)
#正则匹配搜索出来答案的所有网址
#获取词条
head =object.xpath('/html/head//meta[@name="description"]/@content')
#详细内容para=object.xpath('/html/body//div[@class="para"]/text()')
然后为了判断提问者提出的问题是否可行,以及模式匹配的选择,加入判断:
result='小智:'for i in para:result+=iif result=='小智:':print("小智:对不起,我不知道")else:f = open("1.txt", "r")s=f.read()if s=="1":print_one_by_one(result)else:print(result)
然后循环执行问答系统即可:
while(True):if os.path.exists('1.txt'):chuli()else:f = open("1.txt", "w")f.write("1")f.close()chuli()
如下图所示,提问的语句可以任意,不需要固定格式,这样才具有智能性不是吗?
关于作者:李秋键,CSDN 博客专家,CSDN达人课作者。
手把手教你用Python搭建一个AI智能问答系统相关推荐
- 手把手教你用Python搭建一个AI智能问答系统!
导读:智能问答系统是自然语言处理的一个重要分支.今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统. 具体的效果如下所示: 私信小编01 领取完整代码! 下面简单了解下智能问答系统和自然语言处理 ...
- python做一个问答系统_手把手教你用Python搭建一个AI智能问答系统
导读:智能问答系统是自然语言处理的一个重要分支.今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统. 本文经授权转自公众号CSDN(ID:CSDNnews) 作者:李秋键 具体的效果如下所示: 下 ...
- python界面设计-手把手教你用Python设计一个简单的命令行界面
原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...
- 手把手教你用Python搭建IP代理池,轻松破解请求频率限制反爬虫~
我们所写的爬虫,它对服务器发出的网络请求频率要比正常用户的高的多,从而开发者可以将请求频率过高的用户视为爬虫程序,从而来限制爬虫程序. 今天志斌就来给大家分享一下,如何用Python搭建一个IP代理池 ...
- 手把手教你用Python打造一个语音合成系统
击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 大弦嘈嘈如急雨,小弦切切如私语. / ...
- 手把手教你用Python搭建IP代理池
今天给大家分享一下,如何用Python搭建一个IP代理池,来破解服务器通过对用户请求频率进行限制的反爬虫. 01 原理 因为客户端的IP地址是唯一的,所以开发者便将IP地址作为客户端的身份标识. 服务 ...
- 搭建一个FAQ智能问答系统/服务
FAQ智能问答系统 介绍 项目传送门:https://github.com/wzzzd/FAQ_system 构建了一个FAQ智能问答系统. 使用多种方法,实现FAQ的问题-模板匹配功能. 使用Tor ...
- 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...
很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...
- 手把手教你用MindSpore训练一个AI模型!
首先我们要先了解深度学习的概念和AI计算框架的角色(https://zhuanlan.zhihu.com/p/463019160),本篇文章将演示怎么利用MindSpore来训练一个AI模型.和上一章 ...
最新文章
- servlet对mysql数据库的数据增删改
- 浅析企业网站从何开始了解百度蜘蛛?
- db2 之 入门实验
- shuffle操作图解以及job-stage-task-partition区别
- java getrealpath_JavaEE路径陷阱之getRealPath
- ocp证书怎么考_没有基础怎么考初级会计证书?
- python 默认配置文件_python各类配置文件写法
- Tor去匿名化?俄罗斯联邦安全局秘密项目因承包商被入侵遭曝光
- 拿什么拯救你的硬盘?十大绝招帮你忙
- 正菱台体积在线计算机,正四棱台体积,表面积,棱长,质量在线计算器_三贝计算网_23bei.com...
- 诗与远方:无题(九十四)
- error CS0227: Unsafe code may only appear if compiling
- Android主流插件化
- 今日头条,今日特卖自媒体号如何申请。
- SQLite3的安装使用
- 人工智能:风口之上泡沫之中谨慎入坑
- 计算机网络安全职业资格证书,计算机网络管理员职业资格证书
- sql查询记录数大于1
- 硬盘 IDE 切换到 AHCI
- 什么是RPC(Remote Procedure Call)
热门文章
- Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图
- C++|Qt工作笔记-Windows平台下的句柄与Qt中QWindow::winId()以及 QPlatformWindow::handle的区别与联系
- 计算机等级考试java题型_计算机等级考试报考建议
- 对比 | Python中超级好用的“列表解析式”、“字典解析式”、“集合解析式”
- 通过ssh方式clone项目_参与开源项目流程
- c语言图案问题,C语言绘图问题
- mysql+查看connection_如何查看MySQL connection id连接id
- (计算机组成原理)第一章计算机系统概述-第四节:计算机的性能指标
- Linux系统编程10:进程入门之系统编程中最重要的概念之进程进程的相关操作使用fork创建进程
- 378. 有序矩阵中第K小的元素