1. 程式人生 > 程式設計 >Python如何實現機器人聊天

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安裝對應的模組。

效果圖如下所示:

Python如何實現機器人聊天

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

程式碼如下所示:

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)

效果圖如下:

Python如何實現機器人聊天

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

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

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

以上就是Python如何實現機器人聊天的詳細內容,更多關於python 實現機器人聊天的資料請關注我們其它相關文章!