Chat bot programmieren?

3 Antworten

Auf der einen Seite wurde schon richtig angemerkt, dass du am Besten alles .lower() setzen solltest.

Das nächste Problem (denke ich), welches ich sehe, ist bei deinem

if einzelwörter in reaktionsantworten

Ich weiß jetzt gerade nicht wie Python das mit einem Array regelt. Du versuchst hier ein Array an Strings in einem Dict-Key zu finden. Wie ich es verstehen würde ist, dass du gerade das hier versuchst:

nutzereingabe = „hello world“
nutzereingabe.split()
# nutzereingabe == [„hello“, „world“]

for einzelwörter in nutzereingabe: 
  if einzelwörter in reaktionsantworten: 
# if „hello“ in „wie geht es dir“: 
#[...]

Deine Einzelwörter werden, bis auf ein „Hallo“ nicht richtig ausgegeben, da der Vergleich immer „false“ zurückgibt.


Dorianos 
Beitragsersteller
 17.04.2021, 18:39

also, was sollte ich ändern? (tut mir leid, ich stehe gerade auf der leitung)

0
Dultus, UserMod Light   17.04.2021, 18:58

Ja, das ist richtig.

Er würde natürlich dann nur die Einzelnen Wörter in der Liste suchen. Gibt dann natürlich keine passende Frage dazu.

0

Moin,

nutzereingabe = nutzereingabe.lower()

Das ist dein Fehler - wenn du nämlich "Bye" eingibst, wird es zu "bye" geändert - das Bye aus deiner reaktionsantworten wird aber mit einem großen B geschrieben.

Und so verhält es sich auch bei anderen Eingaben. Dein Input wird immer verkleinert und du suchst in einer Liste mit großen Buchstaben.

Also nimmst du am besten alle Themenmöglichkeiten in Lower Case.

LG

Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer im IT-Consulting

Dorianos 
Beitragsersteller
 17.04.2021, 16:52

okay, DANKE!

0
Dorianos 
Beitragsersteller
 17.04.2021, 17:01
@Dorianos

Ich habe jetzt jeden anfang klein geschrieben...

0
Dorianos 
Beitragsersteller
 17.04.2021, 17:04
@Dultus, UserMod Light
Bei dem Command: nutzereingabe = nutzereingabe.lower()

Was soll ich daran ändern?

0
Dorianos 
Beitragsersteller
 17.04.2021, 17:30
@Dultus, UserMod Light

# -*- coding: utf-8 -*-

import random

zufallsantworten=["Ich bin mir leider nicht sicher, ob ich Sie richtig verstanden haben"]

reaktionsantworten = {"hallo": "Guten Tag Dorian",

                     "wie geht es dir?": "Was möchtest du denn essen?",

                   "ich bin einsam": "Es tut mir leid das zu hören, ich bin aber für Sie da!",

                     "wie geht es dir?": "Ich bin ein Chatbot, ich habe leider keine Gefühle",

                     "aufwiedersehen!": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",

                     "aufwiedersehen": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",

                     "bye": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",

                     "tschüss": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",

                     "stell dich bitte vor": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",

                     "wer bist du?": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",

                     "wer bist du": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",

                     "darf ich dich JARVIS nennen?": "Mr. Stark, sind Sie es?",

                     "darf ich dich J.A.R.V.I.S nennen?": "Mr. Stark, sind Sie es?",

                     "darf ich dich J.A.R.V.I.S nennen": "Mr. Stark, sind Sie es?",

                     "darf ich dich JARVIS nennen": "Mr. Stark, sind Sie es?",

                     "it's been a long day without you, my friend": "And I'll tell you all about it when I see you again",

                     }

print("Willkommen beim Chatbot")

print("Worüber würden Sie gerne heute sprechen?")

print("Zum beenden einfach 'bye' eintippen")

print("")

nutzereingabe = ""

while nutzereingabe != "bye":

   nutzereingabe = ""

   while nutzereingabe == "":

       nutzereingabe = input("")

   nutzereingabe = nutzereingabe.lower()

   nutzerwoerter = nutzereingabe.split()

   intelligenteAntworten = False

   for einzelwoerter in nutzerwoerter:

       if einzelwoerter in reaktionsantworten:

           print(reaktionsantworten[einzelwoerter])

           intelligenteAntworten = True

   if intelligenteAntworten == False:

       print(random.choice(zufallsantworten))

   print("")

print("Einen schönen Tag wünsche ich Dir. Bis zum nächsten Mal")

Das ist bis jetzt mein Code... (durch das einfügen sieht er leider etwas anders aus)

0
Dultus, UserMod Light   17.04.2021, 17:37
@Dorianos

Das wars - das war lediglich der Auslöser, warum aus der Liste kein Wert gezogen wurde.

Wenn du jetzt "bye" eingibst, kommt deine Meldung nicht mehr.

0
Dultus, UserMod Light   17.04.2021, 18:54
@Dorianos

Ja - weil du über

for einzelwoerter in nutzerwoerter:

Durch jedes Wort iterierst.

Also z.B.

Stell dich vor

Stell

dich

vor

Abfragen musst du aber

if nutzereingabe in reaktionsantworten:

Sonst fragst du nur einzelne Wörter ab - die for-Schleife ist dort also völlig fehl am Platz.

0
Dultus, UserMod Light   17.04.2021, 18:56
@Dorianos
 for einzelwoerter in nutzerwoerter:

       if einzelwoerter in reaktionsantworten:

           print(reaktionsantworten[einzelwoerter])

           intelligenteAntworten = True

Ändern zu

if nutzereingabe in reaktionsantworten:

           print(reaktionsantworten[einzelwoerter])

           intelligenteAntworten = True
0
Dorianos 
Beitragsersteller
 17.04.2021, 19:00
@Dultus, UserMod Light

# -*- coding: utf-8 -*- 

import random

zufallsantworten=["Ich bin mir leider nicht sicher, ob ich Sie richtig verstanden haben"]

reaktionsantworten = {"hallo": "Guten Tag Dorian",

                      "wie geht es dir?": "Was möchtest du denn essen?",

                      "ich bin einsam": "Es tut mir leid das zu hören, ich bin aber für Sie da!",

                      "wie geht es dir?": "Ich bin ein Chatbot, ich habe leider keine Gefühle",

                      "aufwiedersehen!": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",

                      "aufwiedersehen": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",

                      "bye": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",

                      "tschüss": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",

                      "stell dich bitte vor": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",

                      "wer bist du?": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",

                      "wer bist du": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",

                      "darf ich dich JARVIS nennen?": "Mr. Stark, sind Sie es?",

                      "darf ich dich J.A.R.V.I.S nennen?": "Mr. Stark, sind Sie es?",

                      "darf ich dich J.A.R.V.I.S nennen": "Mr. Stark, sind Sie es?",

                      "darf ich dich JARVIS nennen": "Mr. Stark, sind Sie es?",

                      "it's been a long day without you, my friend": "And I'll tell you all about it when I see you again",

                      }

                      

print("Willkommen beim Chatbot")

print("Worüber würden Sie gerne heute sprechen?")

print("Zum beenden einfach 'bye' eintippen")

print("")

nutzereingabe = ""

while nutzereingabe != "bye":

    nutzereingabe = ""

    while nutzereingabe == "":

        nutzereingabe = input("")

        

    nutzereingabe = nutzereingabe.lower()

    nutzerwoerter = nutzereingabe.split()

    

    intelligenteAntworten = False

if nutzereingabe in reaktionsantworten:

           print(reaktionsantworten[einzelwoerter])

           intelligenteAntworten = True

     if intelligenteAntworten == False:

        print(random.choice(zufallsantworten))

        

    print("")

print("Einen schönen Tag wünsche ich Dir. Bis zum nächsten Mal")

0
Dorianos 
Beitragsersteller
 17.04.2021, 19:01
@Dorianos

Es lässt sich nicht mehr ausführen...

0
Dultus, UserMod Light   17.04.2021, 19:07
@Dorianos

Das liegt an deiner Tollen Formatierung hier auf GF;

Nächstes Mal beim Verfassen rechts oben auf das T drücken und auf die drei Punkte. Dann hast du da das Symbol </>. Damit kannst du Code markieren.

unindent does not match any outer indentation level - ist der Fehler.

Das liegt daran, dass durch die Formatierung von GF der Compiler durcheinandergekommen ist.

if nutzereingabe in reaktionsantworten:
    print(reaktionsantworten[einzelwoerter])
    intelligenteAntworten = True
    if intelligenteAntworten == False:
        print(random.choice(zufallsantworten))
    print("")

So muss das dort rein - durch das Kopieren werden Leerzeichen gesetzt, wenn du es nicht über diese Codeformatierung hier machst. Das führt zu dem Fehler. Denn er setzt dann Leerzeichen und Tabs.

0
Dultus, UserMod Light   17.04.2021, 19:11
@Dorianos
import random
zufallsantworten=["Ich bin mir leider nicht sicher, ob ich Sie richtig verstanden haben"]
reaktionsantworten = {"hallo": "Guten Tag Dorian",
                      "wie geht es dir?": "Was möchtest du denn essen?",
                      "ich bin einsam": "Es tut mir leid das zu hören, ich bin aber für Sie da!",
                      "wie geht es dir?": "Ich bin ein Chatbot, ich habe leider keine Gefühle",
                      "aufwiedersehen!": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
                      "aufwiedersehen": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
                      "bye": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
                      "tschüss": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
                      "stell dich bitte vor": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
                      "wer bist du?": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
                      "wer bist du": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
                      "darf ich dich JARVIS nennen?": "Mr. Stark, sind Sie es?",
                      "darf ich dich J.A.R.V.I.S nennen?": "Mr. Stark, sind Sie es?",
                      "darf ich dich J.A.R.V.I.S nennen": "Mr. Stark, sind Sie es?",
                      "darf ich dich JARVIS nennen": "Mr. Stark, sind Sie es?",
                      "it's been a long day without you, my friend": "And I'll tell you all about it when I see you again",
                      }
print("Willkommen beim Chatbot")
print("Worüber würden Sie gerne heute sprechen?")
print("Zum beenden einfach 'bye' eintippen")
print("")
nutzereingabe = ""
while nutzereingabe != "bye":
    nutzereingabe = ""
    while nutzereingabe == "":
        nutzereingabe = input("")
    nutzereingabe = nutzereingabe.lower()
    nutzerwoerter = nutzereingabe.split()
    intelligenteAntworten = False
    if nutzereingabe in reaktionsantworten:
        print(reaktionsantworten[nutzereingabe])
        intelligenteAntworten = True
        if intelligenteAntworten == False:
            print(random.choice(zufallsantworten))
    print("")
print("Einen schönen Tag wünsche ich Dir. Bis zum nächsten Mal")

So muss das Programm aussehen - mit einigen Ausnahmen:

Die Fragen mit JARVIS müssen klein geschrieben werden - nicht vergessen, dass du deinen Text automatisch klein machen lässt. Also fragt er nach jarvis, nicht JARVIS.

Btw -

if nutzereingabe in reaktionsantworten:
    print(reaktionsantworten[einzelwoerter])
    intelligenteAntworten = True
    if intelligenteAntworten == False:
        print(random.choice(zufallsantworten))
    print("")

Musste zu

if nutzereingabe in reaktionsantworten:
    print(reaktionsantworten[nutzereingabe])
    intelligenteAntworten = True
    if intelligenteAntworten == False:
        print(random.choice(zufallsantworten))
    print("")

geändert werden. (print(reaktionsantworten[einzelwoerter]) zu print(reaktionsantworten[nutzereingabe]))

0

Du kannst nicht einfach so nach einem einzelwort in einem haufen von Strings in listen suchen. Du müsstest jede einzelne mögliche Antwort durchgehen und dort nach dem schlüssel des dictionarys suchen. So findet der nichts.


Dorianos 
Beitragsersteller
 17.04.2021, 16:20

??

0
Dorianos 
Beitragsersteller
 17.04.2021, 16:20

Was meinst du

0
Dorianos 
Beitragsersteller
 17.04.2021, 16:24

Also wo habe ich den Fehler?

0
Dultus, UserMod Light   17.04.2021, 16:38

So funktioniert es schon - aber das .lower(), bzw. seine Liste bricht ihm das Genick.

0