导读:智能问答系统是自然语言处理的一个重要分支。今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统。

具体的效果如下所示:

私信小编01  领取完整代码!

下面简单了解下智能问答系统和自然语言处理的概念,智能问答系统是自然语言处理的一个重要分支。现在普遍认为智能问答能够独立解决很多问题,但是必须要承认现在技术所处的初级阶段的性质。也就是说,智能问答系统在现阶段最大的价值在于为客服人员赋能,而并非独立于人自行解决众多目前还有巨大错误率和不确定性的问题。

一旦具有这样的思想基础——通过智能问答系统为客服人员附能,那么将智能问答系统做成一个工具和产品的基础就有了,只有通过产品化、工具化的方式,才能够实现这个预期。

自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。

因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。

下面开始搭建我们的智能问答系统,首先我们需要导入的库:

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()

如下图所示,提问的语句可以任意,不需要固定格式,这样才具有智能性不是吗?

手把手教你用Python搭建一个AI智能问答系统!相关推荐

  1. 手把手教你用Python搭建一个AI智能问答系统

    导读:智能问答系统是自然语言处理的一个重要分支.今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统. 本文经授权转自公众号CSDN(ID:CSDNnews) 作者:李秋键 具体的效果如下所示: 下 ...

  2. python做一个问答系统_手把手教你用Python搭建一个AI智能问答系统

    导读:智能问答系统是自然语言处理的一个重要分支.今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统. 本文经授权转自公众号CSDN(ID:CSDNnews) 作者:李秋键 具体的效果如下所示: 下 ...

  3. python界面设计-手把手教你用Python设计一个简单的命令行界面

    原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...

  4. 手把手教你用Python搭建IP代理池,轻松破解请求频率限制反爬虫~

    我们所写的爬虫,它对服务器发出的网络请求频率要比正常用户的高的多,从而开发者可以将请求频率过高的用户视为爬虫程序,从而来限制爬虫程序. 今天志斌就来给大家分享一下,如何用Python搭建一个IP代理池 ...

  5. 手把手教你用Python打造一个语音合成系统

    击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 大弦嘈嘈如急雨,小弦切切如私语. / ...

  6. 手把手教你用Python搭建IP代理池

    今天给大家分享一下,如何用Python搭建一个IP代理池,来破解服务器通过对用户请求频率进行限制的反爬虫. 01 原理 因为客户端的IP地址是唯一的,所以开发者便将IP地址作为客户端的身份标识. 服务 ...

  7. 搭建一个FAQ智能问答系统/服务

    FAQ智能问答系统 介绍 项目传送门:https://github.com/wzzzd/FAQ_system 构建了一个FAQ智能问答系统. 使用多种方法,实现FAQ的问题-模板匹配功能. 使用Tor ...

  8. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  9. 手把手教你用MindSpore训练一个AI模型!

    首先我们要先了解深度学习的概念和AI计算框架的角色(https://zhuanlan.zhihu.com/p/463019160),本篇文章将演示怎么利用MindSpore来训练一个AI模型.和上一章 ...

最新文章

  1. Python(1) 整型与浮动型
  2. 没有活动混音器设备可用的解决方法
  3. java保留有效数字
  4. Mysql 查询统计练习
  5. git 使用详解-- tag打标签
  6. 【PAT - 甲级1010】Radix (25分)(二分,进制转化)
  7. 【批处理学习笔记】第十四课:常用DOS命令(4)
  8. ext store 数据修改_Vue 组件数据通信方案总结
  9. colormap保存 matlab_Matlab教程 | 利用NC文件进行相关系数场的计算及绘制
  10. QBC检索和本地SQL检索
  11. 39页第6题 求贷款的金额
  12. @Transactional注解属性(2)
  13. 利用Brettle.Web.NeatUpload控件对打文件进行上传(转)
  14. (转)交替方向乘子法(ADMM)的原理和流程的白话总结
  15. 数据库实验八 触发器实验
  16. 安装office相关组件出现错误1310
  17. repo命令无法从gooole的网站下载问题解决办法
  18. 编码规则的发展历程(通俗版)
  19. word文档doc格式转换成docx
  20. Qt中setPlainText()和setText()有什么区别?

热门文章

  1. 新任技术管理者应该怎样去开始帮助他人?
  2. Windows 10 专业版Edge浏览器大声朗读中 Online(Natural)语音无法使用的问题
  3. eclipse php设置xdebug,eclipse 中配置php的 XDebug调试
  4. Delphi 如何操作Excel
  5. Python 从零到一
  6. mysql安装麻烦_Mysql安装教程
  7. 快速实现WIFI TCP通信详解
  8. STM32H750VB读写FM24CL16铁电存储器
  9. Android适配手机与平板屏幕尺寸
  10. ElementUI日期时间选择器限制时间范围,禁止此刻之前的所有时间选择(精确到,时、分、秒)、pickerOptions、日期选择器范围选择