2017-01-02 19 views
0

Ich baue gerade einen persönlichen Assistenten Bot als eine Herausforderung, während ich in der Schulpause bin. Ich habe derzeit Probleme bei der Integration ChatterBot mit einem SpeechRecognition. Wenn ich rufe beide in der gleichen Datei, ich bekomme keine Fehler:Python Spracherkennung und Chatterbot

import speech_recognition as sr 
from chatterbot import ChatBot 

def setup(): 
    chatbot = ChatBot(
     'Ron Obvious', 
     trainer='chatterbot.trainers.ChatterBotCorpusTrainer' 
    ) 

    # Train based on the english corpus 
    chatbot.train("chatterbot.corpus.english") 
    while True: 
     get_response(chatbot) 

def get_response(chatbot): 
    # Get a response to an input statement 
    speech = return_audio() 
    print chatbot.get_response(speech) 

def return_audio(): 
    r = sr.Recognizer() 
    with sr.Microphone() as source: 
     audio = r.listen(source) 
    try: 
     speech = r.recognize_google(audio) 
     try: 
      speech = str(speech) 
      print speech 
      return speech 
     except TypeError: 
      print "Error! Could not convert speech to string!" 
    except sr.UnknownValueError: 
     print "Error! Could not process that audio." 
     return "Error!" 
    except sr.RequestError as e: 
     print "Error! No internet connection to Google Sound Recognizer." 
     return "Error!" 

setup() 

Allerdings, wenn ich die beide in zwei verschiedenen Dateien zu behalten, erhalte ich ein Attribut. Ich komme um das Programm herum, indem es eine Ausnahme auslöst, aber diese Ausnahme bedeutet, dass der Bot niemals tatsächlich mit dem Benutzer interagiert.

Bellow sind die beiden Dateien: Anhören

import speech_recognition as sr 
from chatterbot import ChatBot 

import Messanger_Alert as MA 
import Weather 
import Email_Alert 
import Chat 
import Run 


def start(): 
    bot = Chat.start() 
    MA_client = MA.login() 
    print "Hello Luke!" 
    print "I am ready for your command! :D" 
    while True: 
     speech = str(return_audio()) 
     if not speech: 
      print "Error! Speech returned nonetype!" 
      continue 
     else: 
      try: 
       if any(word in speech for word in ("Jason", "jason")): #Old key words: "SysGen", "Sysgen", "System", "system" - will reimpliment if needed 
        if any(word in speech for word in ("Message", "message", "Messenger", "messenger", "Facebook", "facebook")): 
         if any(word in speech for word in ("Send", "send")): 
          MA.send_message(MA_client) #now getting an attribute error. 
          print "Ready for next command!" 
         elif any(word in speech for word in ("Search Friend", "search friend", "Seach friend", "search Friend", "friend", "Friend", "friends", "Friends")): 
          MA.friend_search(MA_client) 
          print "Ready for next command!" 
         elif any(word in speech for word in ("Check", "check")): 
          MA.check_message(MA_client) 
          print "Ready for next command!" 
        elif any(word in speech for word in ("Email", "email")): 
         if any(word in speech for word in ("Personal", "personal", "Home", "home")): 
          Email_Alert.login1() 
          print "Ready for next command!" 
         elif any(word in speech for word in ("School", "school", "Dorm", "dorm", "UCSD", "ucsd")): 
          Email_Alert.login2() 
          print "Ready for next command!" 
        elif any(word in speech for word in ("Weather", "weather", "Forecast", "forecast")): 
         Weather.decide() 
        elif any(word in speech for word in ("Goodnight", "goodnight", "Bye", "bye", "Goodbye", "goodbye")): 
         print "Goodnight Luke!" 
         exit() 
        else: 
         Chat.talk(bot, speech) 
       elif speech == "Error!": 
        return_audio() 
       else: 
        Chat.talk(bot, speech) 
      except sr.UnknownValueError: 
       print "Error! Could not process that audio." 
      except sr.RequestError as e: 
       print "Error! No internet connection to Google Sound Recognizer." 


def return_audio(): 
    r = sr.Recognizer() 
    with sr.Microphone() as source: 
     audio = r.listen(source) 
    try: 
     speech = r.recognize_google(audio) 
     try: 
      speech = str(speech) 
      print speech 
      return speech 
     except TypeError: 
      print "Error! Could not convert speech to string!" 
    except sr.UnknownValueError: 
     print "Error! Could not process that audio." 
     return "Error!" 
    except sr.RequestError as e: 
     print "Error! No internet connection to Google Sound Recognizer." 
     return "Error!" 

Chat:

from chatterbot import ChatBot 
from chatterbot.trainers import ListTrainer 
import os.path 

import Listen 

def start(): 
    file_list = ["Jason_logs.txt", "Sample1.txt"] 
    chatbot = ChatBot('Jason', trainer='chatterbot.trainers.ChatterBotCorpusTrainer') 
    for path in file_list: 
     if os.path.exists(path) == "True": 
      train_from_text(chatbot, path) 
    train_bot(chatbot) 

def train_from_text(chatbot, path): 
    conversation = [] 
    with open(path, 'r') as f: 
     while True: 
      line1 = f.readline() 
      line2 = f.readline() 
      if not line2: 
       break 
      else: 
       conversation.append(line1) 
       conversation.append(line2) 
    chatbot.set_trainer(ListTrainer) 
    chatbot.train(conversation) 

def train_bot(chatbot): 
    # Train based on the english corpus 
    chatbot.train("chatterbot.corpus.english") 
    # Train based on english greetings corpus 
    chatbot.train("chatterbot.corpus.english.greetings") 
    # Train based on the english conversations corpus 
    chatbot.train("chatterbot.corpus.english.conversations") 

def talk(chatbot, entry): 
    try: 
     response = chatbot.get_response(str(entry)) 
     print response 
     with open("Jason_logs.txt", "a") as f: 
      f.write(entry) 
      f.write(response) 
    except TypeError: 
     print "Error! Could not convert speech to string!" 
    except AttributeError: 
     print "Error! Speech not accepted by Jason's Chatterbot libraries." 

ich nicht ganz sicher bin, warum dies so ist, weil sie beide arbeiten, wenn sie in der gleichen Datei (die erster Teil des Codes). Aus organisatorischen Gründen möchte ich die beiden Dateien jedoch lieber getrennt aufbewahren.

Danke für alle Ideen und Lösungen, die Sie geben können!

** Edit: ** Hier ist die Traceback-Fehler (was, wenn ich das Attribut Fehler in Chat kommentieren Sie entsteht):

Traceback (most recent call last): 
    File "C:/Users/lukec/PycharmProjects/Sysgen_AI/Run_File.py", line 24, in <module> 
    startup() 
    File "C:/Users/lukec/PycharmProjects/Sysgen_AI/Run_File.py", line 13, in startup 
    voice() 
    File "C:/Users/lukec/PycharmProjects/Sysgen_AI/Run_File.py", line 19, in voice 
call Jason 
    Listen.start() 
    File "C:\Users\lukec\PycharmProjects\Sysgen_AI\Listen.py", line 47, in start 
    Chat.talk(bot, speech) 
    File "C:\Users\lukec\PycharmProjects\Sysgen_AI\Chat.py", line 39, in talk 
    response = chatbot.get_response(str(entry)) 
AttributeError: 'NoneType' object has no attribute 'get_response' 
+1

Sie sollten den tatsächlichen Fehler enthalten, den Sie erhalten haben (der Traceback hat unglaublich wichtige Informationen). Sie vergleichen auch nicht Äpfel und Orangen, da Ihr Code, der in zwei Dateien aufgeteilt ist, nicht genau dasselbe zu tun scheint wie die Einzeldatei-Version (was bedeutet, dass das Problem eine andere Änderung sein könnte und nichts mit Sein zu tun hat) in zwei Dateien). –

+0

können Sie bitte die vollständige Traceback von dem Fehler buchen. –

+0

Traceback Fehler geschrieben. Danke für die schnellen Antworten! – TobyTobyo

Antwort

1

Chat.start() nicht chatbot zurückkehrt, so dass die implizit zurückgegebene Wert ist None. Versuchen Sie, am Ende von start() hinzuzufügen. Sie können auch Ihre eigene Chatbot-Wrapper-Klasse erstellen, anstatt ein Modul zu verwenden und Chatbot-Instanzen weiterzugeben.

+0

Danke! Das schien mein Problem zu sein. Vielen Dank für die schnelle Antwort! – TobyTobyo