Python实现机器人聊天
今天午休的时候,无意之中看了一篇博客,名字叫Python实现机器人,感觉挺有的意思的。
于是用其写了一个简单的Python聊天,源码如下所示:
# -*- coding: utf- -*-
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安装对应的模块。
效果图如下所示:

唯一美中不足的是英文,不过没关系,国内有图灵机器人。
代码如下所示:
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 必须 APIkey
info 必须 - 请求内容,编码方式为"utf-8"
userid 必须 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)
效果图如下:

可能由于机器人智能太低了,有点答非所问。
更多精彩可以去图灵机器人官网了解:http://www.tuling123.com
编程的世界是有趣的,你去探索,你会发现很多有意思的事情。
Python实现机器人聊天的更多相关文章
- 用Python写的一个多线程机器人聊天程序
本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...
- Python实现机器人语音聊天
一.前言说明 1.功能简述 登录后进入聊天界面,如果服务器都在同一个地址,则都进入同一个房间 进入/离开/发消息同一房间用户都可以看到,输入“tuling”或“chatbot”可以切换为和Tuling ...
- Python微信机器人
Python微信机器人 本文目录 一 简介 二 登录微信 三 微信好友男女比例 四 微信好友地域分布 五 微信聊天机器人 一 简介 wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量 ...
- Java接入图灵机器人,实现与机器人聊天
很多人都玩过微信,其中就有与机器人聊天的功能:
- Vue2 全家桶仿 微信App 项目,支持多人在线聊天和机器人聊天
前言 这个项目是利用工作之余写的一个模仿微信app的单页面应用,整个项目包含27个页面,涉及实时群聊,机器人聊天,同学录,朋友圈等等,后续页面还是开发中.写这个项目主要目的是练习和熟悉vue和vuex ...
- Python实现文字聊天室
你是否想过用所学的Python开发一个图形界面的聊天室程序啊? 像这样的: 如果你想开发这样一个有点怀旧风格的聊天程序,那么可以接着看: 要开发这个聊天程序,你需要具备以下知识点: asyncore ...
- python写机器人玩僵尸骰子
python写机器人玩僵尸骰子由Al Sweigart用python发布注意:我正在为我的僵尸骰子模拟器寻找反馈,以及这一套指令.如果你觉得有什么地方可以改进,请发邮件到al@inventwithpy ...
- python模拟QQ聊天室(tcp加多线程)
python模拟QQ聊天室(tcp加多线程) 服务器代码: from socket import * from threading import * s = socket(AF_INET,SOCK_S ...
- 一个使用 Python 的人工智能聊天机器人框架
一个Python 的 AI Chatbot框架 建立一个聊天室可以听起来很棒,但它是完全可行的. IKY是一个内置于Python中的AI动力对话对话界面. 使用IKY,很容易创建自然语言会话场景,无需 ...
随机推荐
- cf1136D. Nastya Is Buying Lunch(贪心)
题意 题目链接 给出一个排列,以及\(m\)个形如\((x, y)\)的限制,表示若\(x\)在\(y\)之前则可以交换\(x, y\). 问\(n\)位置上的数最多能前进几步 \(n \leqsla ...
- 关于Object数组强转成Integer数组的问题:Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
一.当把Object数组,强转的具体的Integer数组时,会报错. 代码如下: //数组强转报错演示 Object[] numbers = {1,2,3}; Integer[] ints = (In ...
- 关于TensorFlow你需要了解的9件事
关于TensorFlow你需要了解的9件事 https://mp.weixin.qq.com/s/cEQAdLnueMEj0OQZtYvcuw 摘要:本文对近期在旧金山举办的谷歌 Cloud Next ...
- vue-cil和webpack中本地静态图片的路径问题解决方案
1 本地图片动态绑定img的src属性 一般我们在html中或者vue组件文件中引用图片是这样,这是不需要做特别处理的 我们将图片放入assets中或者重新建立个文件夹img什么的都可以,随意- 但是 ...
- Java之static作用的全方位总结
1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...
- DES数据解密
/// <summary> /// DES数据解密 /// </summary> /// <param name="targetValue">& ...
- Android滑动冲突解决
(1).场景一:外部滑动方向跟内部滑动方向不一致,比如外部左右滑动,内部上下滑动 ViewPager+Fragment配合使用,会有滑动冲突,但是ViewPager内部处理了这种滑动冲突 如果 ...
- 你不可不知的Java引用类型【总结篇】
四种引用类型总结 引用级别:强引用 > 软引用 > 弱引用 > 虚引用 理解 就如最开始说的,设置四种引用类型,是为了更好的控制对象的生命周期,让代码能够一定程度上干涉GC过程,所以 ...
- (其他)window10分盘
由于thinkpad的一个c盘大概是一个t左右,所以我们先分一下盘. 首先找到计算机管理,然后找磁盘管理,右击比较大的磁盘,压缩卷,大概就压缩一半吧,然后新建简单卷,一直下一步,紧接着就完成了. ...
- php post接口,登录功能
登录功能同注册功能一样,都是使用 post 方法,在执行 sql 语句时,同样要使用 "select * from 表名 where 键名 = 参数" 的查询方式,不同的是: 注册 ...