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的动态重新封装的教程
Apr 11 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
如何用Python徒手写线性回归
Jan 25 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 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模板之Phpbean的目录结构
2008/01/10 PHP
PHP函数常用用法小结
2010/02/08 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
js切换光标示例代码
2013/10/10 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
python利用正则表达式提取字符串
2016/12/08 Python
python在非root权限下的安装方法
2018/01/23 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
10个Python小技巧你值得拥有
2018/09/29 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
英国航空官网:British Airways
2016/09/11 全球购物
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
班主任班级寄语大全
2014/04/04 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
Nginx的基本概念和原理
2022/03/21 Servers