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 调用VC++的动态链接库(DLL)
Sep 06 Python
python绘图库Matplotlib的安装
Jul 03 Python
简单讲解Python编程中namedtuple类的用法
Jun 21 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
Python 在字符串中加入变量的实例讲解
May 02 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
Sep 04 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 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中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
php post换行的方法
2020/02/03 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
2017/11/24 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
基于Python的关键字监控及告警
2017/07/06 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
SQL SERVER面试资料
2013/03/30 面试题
初中三好学生自我鉴定
2014/04/07 职场文书
运动会加油稿30字
2015/07/21 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang