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使用Tkinter显示网络图片的方法
Apr 24 Python
Python编写生成验证码的脚本的教程
May 04 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
Python编写打字训练小程序
Sep 26 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
python绘制分布折线图的示例
Sep 24 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 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
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
php上传文件问题汇总
2015/01/30 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
python Django的web开发实例(入门)
2019/07/31 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
大学生物业管理求职信
2013/10/24 职场文书
艺术设计专业个人求职信范文
2013/12/11 职场文书
工作表扬信的范文
2014/01/10 职场文书
新郎父亲婚宴答谢词
2014/01/11 职场文书
英语教学随笔感言
2014/02/20 职场文书
保护环境建议书
2014/03/12 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers