Python實現機器人聊天


今天午休的時候,無意之中看了一篇博客,名字叫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安裝對應的模塊。

效果圖如下所示:

 

 

唯一美中不足的是英文,不過沒關系,國內有圖靈機器人。

代碼如下所示:

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)

效果圖如下:

 

可能由於機器人智能太低了,有點答非所問。

更多精彩可以去圖靈機器人官網了解:http://www.tuling123.com

編程的世界是有趣的,你去探索,你會發現很多有意思的事情。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM