Python如何实现机器人聊天


Posted in Python onSeptember 10, 2020

今天午休的时候,无意之中看了一篇博客,名字叫Python实现机器人,感觉挺有的意思的。
于是用其写了一个简单的Python聊天,源码如下所示:

# -*- coding: utf-8 -*-
import aiml
import sys
import os
 
 
def get_module_dir(name):
 print("module", sys.modules[name])
 path = getattr(sys.modules[name], '__file__', None)
 print(path)
 if not path:
 raise AttributeError('module %s has not attribute __file__' % name)
 return os.path.dirname(os.path.abspath(path))
 
 
alice_path = get_module_dir('aiml') + '\\botdata\\alice'
 
os.chdir(alice_path) # 切换到语料库所在工作目录
 
alice = aiml.Kernel() # 创建机器人alice对象
alice.learn("startup.xml") # 加载...\\botdata\\alice\\startup.xml
alice.respond('LOAD ALICE') # 加载...\\botdata\\alice目录下的语料库
 
while True:
 message = input("Enter your message >> ")
 if("exit" == message):
 exit()
 response = alice.respond(message) # 机器人应答
 print(response)

注意:如果出现某某模块找不到的时候,记得使用pip安装对应的模块。

效果图如下所示:

Python如何实现机器人聊天

唯一美中不足的是英文,不过没关系,国内有图灵机器人。

代码如下所示:

from urllib.request import urlopen,Request
from urllib.error import URLError
from urllib.parse import urlencode
import json

class TuringChatMode(object):
  """this mode base on turing robot"""

  def __init__(self):
    # API接口地址
    self.turing_url = 'http://www.tuling123.com/openapi/api?'

  def get_turing_text(self,text):
    ''' 请求方式:  HTTP POST
      请求参数:  参数   是否必须    长度     说明
            key    必须     32      APIkey
            info    必须     1-32     请求内容,编码方式为"utf-8"
            userid   必须     32      MAC地址或ID
    '''
    turing_url_data = dict(
      key = 'fcbf9efe277e493993e889eabca5b331',
      info = text,
      userid = '60-14-B3-BA-E1-4D',

    )
    # print("The things to Request is:",self.turing_url + urlencode(turing_url_data))
    self.request = Request(self.turing_url + urlencode(turing_url_data))
    # print("The result of Request is:",self.request)

    try:
      w_data = urlopen(self.request)
      # print("Type of the data from urlopen:",type(w_data))
      # print("The data from urlopen is:",w_data)
    except URLError:
      raise IndexError("No internet connection available to transfer txt data")
      # 如果发生网络错误,断言提示没有可用的网络连接来传输文本信息
    except:
      raise KeyError("Server wouldn't respond (invalid key or quota has been maxed out)")
      # 其他情况断言提示服务相应次数已经达到上限

    response_text = w_data.read().decode('utf-8')
    # print("Type of the response_text :",type(response_text))
    # print("response_text :",response_text)

    json_result = json.loads(response_text)
    # print("Type of the json_result :",type(json_result))
    return json_result['text']

if __name__ == '__main__':
  print("Now u can type in something & input q to quit")

  turing = TuringChatMode()

  while True:
    msg = input("\nMaster:")
    if msg == 'q':
      exit("u r quit the chat !")     # 设定输入q,退出聊天。
    else:
      turing_data = turing.get_turing_text(msg)
      print("Robot:",turing_data)

效果图如下:

Python如何实现机器人聊天

可能由于机器人智能太低了,有点答非所问。

更多精彩可以去图灵机器人官网了解:http://www.tuling123.com

编程的世界是有趣的,你去探索,你会发现很多有意思的事情。

以上就是Python如何实现机器人聊天的详细内容,更多关于python 实现机器人聊天的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
利用Python为iOS10生成图标和截屏
Sep 24 Python
Python 多线程实例详解
Mar 25 Python
使用python实现接口的方法
Jul 07 Python
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
python读取几个G的csv文件方法
Jan 07 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
Python字符串的修改方法实例
Dec 19 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
python如何通过pyqt5实现进度条
Jan 20 Python
Python异常处理机制结构实例解析
Jul 23 Python
Python 必须了解的5种高级特征
Sep 10 #Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 #Python
利用python 读写csv文件
Sep 10 #Python
如何用Python 加密文件
Sep 10 #Python
Python 高效编程技巧分享
Sep 10 #Python
python操作redis数据库的三种方法
Sep 10 #Python
Python计算矩阵的和积的实例详解
Sep 10 #Python
You might like
解析thinkphp基本配置 convention.php
2013/06/18 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php实现将Session写入数据库
2015/07/26 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
Jquery 自定义动画概述及示例
2013/03/29 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
Vue表单实例代码
2016/09/05 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
JS中的多态实例详解
2017/10/15 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
法国在线药房:DoctiPharma
2020/10/21 全球购物
两则小学生的自我评价分享
2013/11/14 职场文书
车贷收入证明范本
2014/01/09 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
家长给小学生的评语
2014/01/30 职场文书
高中军训感言400字
2014/02/24 职场文书
报告会主持词
2014/04/02 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
预备党员个人总结
2015/02/14 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python