2个聊天机器人

原创 2014年02月04日 12:31:08

2014/06/28修改.

       修改小黄鸡模块, 小i就不改了, 没什么用。。。


新版小黄鸡模块(只写了个ask函数, teach还没写, 后面应该会继续修改。。)


#coding=utf-8

import json;
import urllib;
import urllib.request;
from urllib.parse import urlencode;

URL_SIMSIMI = "http://www.simsimi.com/talk.htm";
URL_ASKSIMSIMI = "http://www.simsimi.com/func/reqN?";
URL_TEACHSIMSIMI = "";

talkHeader = {
    "Cookie":"simsimi_uid=53294991; simsimi_uid=53294991; isFirst=1; isFirst=1; sid=s%3AXcqIfaDZ5P4biUHi4Xw8TdFE.CYYochQc23%2B%2BvPjDw5HH4yg5MTN%2FSnBtskGXJHEX8f4; AWSELB=150F676708F2639057F41EA6CD9115064C58E864E4D5FE3F62AF683EB3CA54C1A44837308BAB86F4F48D2BA2A2B01B0AEA34FBA3D92BA7AB89083051C189504CF5589F0BF7; teach_btn_url=talk; teach_btn_url=talk; Filtering=0.0; Filtering=0.0; popup_ad_InMobi=1; popup_ad_InMobi=1; menuType=web; menuType=web; selected_nc=ch; selected_nc=ch; __utma=119922954.2134471962.1398783865.1403874641.1403877970.3; __utmb=119922954.23.9.1403880508342; __utmc=119922954; __utmz=119922954.1403874641.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)",
    "Referer":"http://www.simsimi.com/talk.htm", 
    "User-Agent":"Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19",
}

class Simsimi:
    def __init__(self):
        self._opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor());
        
    def ask(self, q):
        data = {
            "lc":"ch",
            "ft":"0.0",
            "req":q,
            "fl":"http://www.simsimi.com/talk.htm",
        };
        request = urllib.request.Request(URL_ASKSIMSIMI + urlencode(data), headers = talkHeader);
        ret = json.loads(self._opener.open(request).read().decode("utf-8"));
        if(ret["result"] == 200 and ret["sentence_link_id"] != 1):
            return ret["sentence_resp"];
        return None;
        
    def teach(self, q, asw):
        pass;
        
def main():
    robot = Simsimi();
    print(robot.ask("sb"));
    
if(__name__ == "__main__"):
    main();





#----------------------------------------------------------------------------------(分割线, 以下内容已失效。。。)--------------------------------------------------------------------------------------------------


大笑找了2个接口,,,用来做聊天机器人(后面应该会写一个贴吧自动回复的机器人。所以先弄下这个),,,有需要就拿去用吧。


小i机器人的。。。。(已失效);

# coding=gbk

import urllib;
import urllib.request;
import hashlib;
import random;
from urllib.parse import urlencode;

realm = "xiaoi.com";
menthod = "POST";
uri = "/robot/ask.do";
string = "abcdefghijklmnopqrstuvwxyz0123456789";

#请求头;
headers = {
        "User-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 LBBROWSER",
        "Cache-Control": "no-cache",
        "Pragma":"no-cache",
        "Host":"nlp.xiaoi.com",
        "Connection":"Keep-Alive",
        "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
        "X-Requested-With":"XMLHttpRequest",
        "X-Auth":"",
        };

#请求的问题;
data = {
        "question":"",
        "userId":"sen506",
        "type":"0",
        };

#生成指定位数的随机数;
def createRand(length):  
    rndStr = ""
    for i in range(0, length):
        rndStr += random.choice(string);
    return rndStr;

#生成X-Auth请求头;
def createXAuth(appKey, secretKey):
    nonce = createRand(40);

    sha1 = hashlib.sha1();
    sha1.update("{0}:{1}:{2}".format(appKey, realm, secretKey).encode("utf-8"))
    ha1 = sha1.hexdigest();

    sha2 = hashlib.sha1();
    sha2.update("{0}:{1}".format(menthod, uri).encode("utf-8"));
    ha2 = sha2.hexdigest();

    sha3 = hashlib.sha1();
    signature = sha3.update("{0}:{1}:{2}".format(ha1, nonce, ha2).encode("utf-8"));
    signature = sha3.hexdigest();

    return "app_key=\"{0}\",nonce=\"{1}\",signature=\"{2}\"".format(appKey, nonce, signature);


class xiaoi:
    def __init__(self, appKey = "", secretKey = ""):
        self.setAppKey(appKey);
        self.setSecretKey(secretKey);
        self._request = urllib.request.Request("http://nlp.xiaoi.com/robot/ask.do", headers);

    def ask(self, qs):
        self._request.headers["X-Auth"] = createXAuth(self._appKey, self._secretKey);

        data["question"] = qs;
        try:
            return urllib.request.urlopen(self._request, urlencode(data).encode("utf-8")).read().decode("utf-8");
        except:
            return "Error";

    def setAppKey(self, appKey):
        self._appKey = appKey;

    def setSecretKey(self, secretKey):
        self._secretKey = secretKey;

def main():
    robot = xiaoi("", "");
    for i in range(1, 100):
        print("问:", end = "");
        question = input();
        print("答:" + robot.ask(question));


if __name__ == "__main__":
    main();

main函数中的xiaoi("", "")引号里面需要传入2个参数,一个是appKey,另一个是secretKey,,这2个注册一个帐号就有了。。地址 小i智能云平台



效果图。。


个人感觉小i机器人有点弱。。。。。。。


小黄鸡的。。。。(这个是网页版的。。收费的api实在用不起。。。)(已失效)

# -*- coding: gbk -*-

import urllib;
import urllib.request;
import json;
from urllib.parse import urlencode;

# 请求头
simsimiHeaders = {
                    "Connection":"keep-alive",
                    "Content-Type":"application/json; charset=utf-8",
                    "Host":"www.simsimi.com",
                    "Referer":"",
                    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 LBBROWSER",
                    "X-Requested-With":"XMLHttpRequest",
                  };

# 调教内容
data = {
        "req":"",
        "resp":"",
        "lc":"ch"
        };

class simsimiWeb:
    def __init__(self):
        self.setOpener();

    def ask(self, qs):
        if(not qs.startswith("teach") and not qs.endswith("teach")):
            return self._ask(qs);
        else:
            return self._teach(qs);

    def _ask(self, qs):
        self._setType("ask");
        request = urllib.request.Request("http://www.simsimi.com/func/req?{0}&lc=ch&ft=0.0".format(urlencode({"msg":qs})), headers = simsimiHeaders);
        result = json.loads(urllib.request.urlopen(request).read().decode("utf-8"));
        if(result["result"] == 100):
            return result["response"];
        elif(result["result"] == 404):
            return """
            这是SimSimi不懂的话! 你可以教我哦.
            example:
                teach|问题|回答|teach
            """;
        else:
            print(result);
            return "Error";

    def _teach(self, word):
        string, qs, asw, string = word.split("|");
        if(string == "" or qs == "" or asw == ""):
            return "格式错误,或者问题、回答为空!";
        self._setType("teach");
        request = urllib.request.Request("http://www.simsimi.com/func/teach", headers = simsimiHeaders);
        data["req"] = qs;
        data["resp"] = asw;
        result = json.loads(urllib.request.urlopen(request, json.dumps(data).encode("utf-8")).read().decode("utf-8"));
        if(result["result"] == 200):
            return result["msg"];
        else:
            print(result);
            return "教的过程中出现错误。。。";        

    def _setType(self, type):
        if(type == "ask"):
            simsimiHeaders["Referer"] = "http://www.simsimi.com/talk.htm";
        elif(type == "teach"):
            simsimiHeaders["Referer"] = "http://www.simsimi.com/teach.htm";

    def setOpener(self):
        opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor());
        urllib.request.install_opener(opener);

def main():
    simsimiRobot = simsimiWeb();
    for i in range(0, 1000):
        print("问:", end = "");
        question = input();
        print("答:" + simsimiRobot.ask(question));

if(__name__ == "__main__"):
    main();

效果图。。(带调教功能。。)




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

tf13: 简单聊天机器人

现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri、Google Now、Amazon Alexa、微软小冰等等。前不久有一个视频比较了Google ...

使用深度学习打造智能聊天机器人

本文对目前使用深度学习来构建聊天机器人的技术进行了总结和归纳。

用 TensorFlow 做个聊天机器人

转自 http://blog.csdn.net/aliceyangxi1987/article/details/71055024 上一次提到了不错的学习聊天机器人的资源,不知道...

4 机器学习实践之手写数字识别- 神经网络识别

在 初步特征选择及线性识别篇中提到机器学习算法输入数据分为原始数据,特征工程(人工选择特征)及深度学习(机器自己计算)。 在前面采用了特征工程的方案,识别率也在85%左右。 识别率不是很高,这跟特...

keras + lstm 情感分类

负面评论如下: 正面评论如下: 使用keras配合lstm效果不错。 代码:#coding:utf-8 ''' Created on 2016-12-20@author: 刘帅 ''' impo...

利用webQQ实现聊天机器人。。

模块:QQRobot.py 用法:传入QQ, 密码, 调用server()函数即可。。。 各模块的地址: webQQLogin.py:http://blog.csdn.net/qq5066573...

Select()系统调用及fd_set的应用

Select()系统调用及文件描述符集fd_set的应用湖南省衡阳市环境工程公司网络中心 张 卿 在网络程序中,一个进程同时处理多个文件描述符是很常见的...

6 机器学习实践之手写数字识别-卷积神经网络实现

感谢 以下四篇文章,让我比较深刻了解了卷积神经网络 CNN 卷积神经网络推导和实现 http://blog.csdn.net/zouxy09/article/details/9993371 c++ ...

linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解

首先:1。终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念. 一台主机,连很多终端,终端为主机提供了人机接口,每个人都通过终端使用主机的资源. 终端有字符哑终端和图形终端两...

QQ 聊天机器人小薇发布!

XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动,例如将 QQ 群消息同步到论坛,或者将论坛新帖推送到 QQ 群。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)