Python实现机器人聊天

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

1# -*- coding: utf-8 -*- 2import aiml 3import sys 4import os 5 6 7def get_module_dir(name): 8 print("module", sys.modules[name]) 9 path = getattr(sys.modules[name], '__file__', None) 10 print(path) 11 if not path: 12 raise AttributeError('module %s has not attribute __file__' % name) 13 return os.path.dirname(os.path.abspath(path)) 14 15 16alice_path = get_module_dir('aiml') + '\\botdata\\alice' 17 18os.chdir(alice_path) # 切换到语料库所在工作目录 19 20alice = aiml.Kernel() # 创建机器人alice对象 21alice.learn("startup.xml") # 加载...\\botdata\\alice\\startup.xml 22alice.respond('LOAD ALICE') # 加载...\\botdata\\alice目录下的语料库 23 24while True: 25 message = input("Enter your message >> ") 26 if("exit" == message): 27 exit() 28 response = alice.respond(message) # 机器人应答 29 print(response)

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

效果图如下所示:

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

代码如下所示:

1from urllib.request import urlopen,Request 2from urllib.error import URLError 3from urllib.parse import urlencode 4import json 5 6class TuringChatMode(object): 7 """this mode base on turing robot""" 8 9 def __init__(self): 10 # API接口地址 11 self.turing_url = 'http://www.tuling123.com/openapi/api?' 12 13 def get_turing_text(self,text): 14 ''' 请求方式: HTTP POST 15 请求参数: 参数 是否必须 长度 说明 16 key 必须 32 APIkey 17 info 必须 1-32 请求内容,编码方式为"utf-8" 18 userid 必须 32 MAC地址或ID 19 ''' 20 turing_url_data = dict( 21 key = 'fcbf9efe277e493993e889eabca5b331', 22 info = text, 23 userid = '60-14-B3-BA-E1-4D', 24 25 ) 26 # print("The things to Request is:",self.turing_url + urlencode(turing_url_data)) 27 self.request = Request(self.turing_url + urlencode(turing_url_data)) 28 # print("The result of Request is:",self.request) 29 30 try: 31 w_data = urlopen(self.request) 32 # print("Type of the data from urlopen:",type(w_data)) 33 # print("The data from urlopen is:",w_data) 34 except URLError: 35 raise IndexError("No internet connection available to transfer txt data") 36 # 如果发生网络错误,断言提示没有可用的网络连接来传输文本信息 37 except: 38 raise KeyError("Server wouldn't respond (invalid key or quota has been maxed out)") 39 # 其他情况断言提示服务相应次数已经达到上限 40 41 response_text = w_data.read().decode('utf-8') 42 # print("Type of the response_text :",type(response_text)) 43 # print("response_text :",response_text) 44 45 json_result = json.loads(response_text) 46 # print("Type of the json_result :",type(json_result)) 47 return json_result['text'] 48 49if __name__ == '__main__': 50 print("Now u can type in something & input q to quit") 51 52 turing = TuringChatMode() 53 54 while True: 55 msg = input("\nMaster:") 56 if msg == 'q': 57 exit("u r quit the chat !") # 设定输入q,退出聊天。 58 else: 59 turing_data = turing.get_turing_text(msg) 60 print("Robot:",turing_data)

效果图如下:

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )