Python 简易聊天机器人

聊天机器人
|
|-----MySql
|
|---module--“逻辑运算层”
|          |
|          |---ciku--“与词库交互”
|          |
|          |---dicty.txt--"词库" 
|          |---sever--
|          |
|          | 
|          |---sqlo--
|          | 
|          | 
|          |---sqlsever-- 
|          | 
|          | 
|
|---utility-
|          |---sqlhelper--“与数据库交互”
|          
|           
|----index---“服务器端”
|
|----client---“客户端”     

代码

index:

import os,sys

path_db=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(path_db)

from module import server

def main():
    server.severmain()

if __name__ == '__main__':
    main()
View Code

client:

import socket

client = socket.socket()
ip_port = ("127.0.0.1",6666)
client.connect(ip_port)
flag = True
while flag:
    say = client.recv(1024)
    print(say.decode())
    inp = input("root:")
    client.send(inp.encode())
    if inp == "exit":
        break
View Code

module:

ciku:

from module import sqlsever
from module import sqlo
import random

def checkdata(data):
    f = open("module\dicty","r",encoding="utf-8")

    for info in f:
        if info == "\n":
            continue
        elif info.strip() in data:
            say = f.__next__()
            print(say.strip())
            return say.strip()

    say = [data,"笨蛋我不知道","哎吆,人家不懂","嘿嘿","儿子"]
    say = say[random.randint(0,4)]
    return say
View Code

dicty:

只选择词库中一小部分,用的酷Q机器人词库

不要哭
我不哭谁哭啊,你来? 55555~~~

谢谢
不用谢,对我来说是小菜一碟的事。

谢谢
你太客气了,跟我还客气什么啊!

回来吧
好吧,听你的。

回来吧
这样的晚上要是有你在身边多好啊!不过你要是陪我玩我会更开心的,发送“游戏”给我吧!

回来吧
不回,就是不回!

你骂人
我还要打你呢!!!

你骂人
不服气么?宝贝儿

唱歌
我会唱好多歌?想听吗?

算了
那该怎么办?

有啊
真的有吗?

什么
不知道

什么
我也不知道。

什么
回去帮你查查。

什么
你说是什么?

笨蛋
我是很笨哦,聪明的话就不跟你聊天了。

笨蛋
笨蛋很好吃的,里面是黄色的。

笨蛋
嘿嘿。。。

笨蛋
你都看出来了。

多少
你说多少就多少。

沉默
沉默也是一种美德,你知道吗?

沉默
沉默就是胜利。。。

是啊
是就好。

是啊
你讲得到很干脆。

是啊
呵呵,是就行。

公司
哪个公司?

注册
开什么?

产品
是啊,做产品辛苦呢

问题
什么问题,告诉我吧,我来帮你

服务
我不是服务员

作者
什么作者

我的
没关系~我有着宽广的胸怀。

方式
什么方式?你喜欢什么方式

因为
还所以呢

北京
北京是中华人民共和国的首都,中国中央四个直辖市之一,中国的政治、文化、外交中心,国内国际交往中心之一,全国第二大城市(仅次于上海市),中国北方最大的城市。这个拥有1700多万人口的城市已经成为一个现代化国际大都市。
View Code

sever:

import socket
from module import ciku
from module import sqlo

def checkinfo(info,data,conn):
    '判断用户输入'
    if info != "1".encode():
        sqlo.write_sql("root", data.encode())
        conn.send(data.encode())
        flag = True
    elif info.decode() == "exit":
        flag = False
    else:
        say = sqlo.read_sql()
        conn.send(str(say).encode())
    return flag

def severcon():
    '建立连接'
    sk = socket.socket()
    ip_port = ("127.0.0.1", 6666)
    sk.bind(ip_port)
    sk.listen(5)
    return sk

def severmain():
    sk = severcon()
    conn,address = sk.accept()
    say = "你好,我是小白!"
    sqlo.write_sql("root",say.encode())
    conn.send(say.encode())

    flag = True
    while flag:
        info = conn.recv(1024)
        sqlo.write_sql("用户".encode(),info)
        data =ciku.checkdata(info.decode())
        flag =checkinfo(info, data, conn)
    conn.close()
View Code

sqlo:

from module.sqlsever import userinfo

user = userinfo()

def write_sql(username,says):
    user.write_record(username,says)

def read_sql():
    sql_data =user.record()
    return sql_data
View Code

sqlsever

from utility.sql_helper import MySqlHelper


class userinfo(object):

    def __init__(self):
        self.__helper = MySqlHelper()

    def write_record(self,username,says):
        sql = "insert into jiqiren(username,says) values(%s,%s)"
        params = (username,says)
        return  self.__helper.Get_one(sql,params)
    def record(self):
        sql = "select * from jiqiren"
        return self.__helper.Get_one1(sql)
View Code

utility:

import  pymysql

conn_dict = dict(host = "127.0.0.1",user = "root",passwd = "xxxx",db ="xxxx",charset='utf8' )

class MySqlHelper(object):

    def __init__(self):
        self.__conn_dict = conn_dict

    def Get_one(self,sql,params):
        conn = pymysql.connect(**self.__conn_dict)
        cur = conn.cursor(pymysql.cursors.DictCursor)
        reCount = cur.execute(sql, params)
        conn.commit()
        cur.close()
        conn.close()



    def Get_one1(self,sql):
        conn = pymysql.connect(**self.__conn_dict)
        cur = conn.cursor(pymysql.cursors.DictCursor)

        reCount = cur.execute(sql)
        data = cur.fetchall()
        conn.commit()
        cur.close()
        conn.close()
        return data
View Code

 

 聊天与词库交互部分仍不完善。

posted @ 2017-01-05 12:33  Chaz_Sun  阅读(502)  评论(0编辑  收藏  举报