Mijn vraag
Voor ons schoolproject moesten we een chatbot bepaalde vragen laten beantwoorden. Op dit moment werkt alles, maar we moeten nog implementeren dat er later in het gesprek de ingegeven naam naar voren komt. De robot moet dus later in het gesprek je naam opnieuw gebruiken (die wordt gegeven tijdens het gesprek) op een geschikt moment (de robot zal dus een basisgeheugen moet hebben van delen van het gesprek). We kunnen het niet opgelost krijgen. Kunt u ons helpen? Dat zou geweldig zijn! Bij voorbaat bedankt.
Met vriendelijke groet, Laura
Wat ik al gevonden of geprobeerd heb op pyhton:
import re
import random
reflections = {
"ben": "zijn",
"was": "waren",
"ik": "jij",
"ik zou": "wij zouden",
"ik heb": "jij hebt",
"ik zal" : "men zal",
"mijn": "jouw",
"zijn": "ben",
"jij hebt": "ik heb",
"jij zal": "ik zal",
"jouw": "mijn",
"van jou": "van mij",
"jij": "me",
"mezelf": "jij"
}
psychobabble = [
[r'(.*) Tilburg',
["Tilburg is een stad in Noord-Brabant",
"Waarom wil je wat weten over Tilburg?",
"Tilburg heeft meer dan vijftien miljoen inwoners."]],
[r'(.*) Tilburg University',
["Tilburg University is een universiteit in Tilburg",
"Waarom wil je meer weten over Tilburg University?",
"Tilburg University telt anno 2018 13050 studenten.",
"De campus van Tilburg university ligt in het hartje van Tilburg"]],
[r'Ik heb (.*) nodig',
["Waarom heb je {0} nodig?",
"Zou {0} je echt helpen?",
"Weet je zeker dat je {0} nodig hebt?"]],
[r'Waarom doe je ([^\?]*)\? niet?',
["Denk je echt dat ik {0} niet begrijp?",
"Wellicht dat ik het ooit {0}.",
"Wil je echt dat ik {0}?"]],
[r'Waarom kan ik niet ([^\?]*)\??',
["Denk je dat je in staat zou zijn om {0}?",
"Als je zou kunnen {0}, wat zou je dan doen?",
"Ik weet het niet -- Waarom kan je niet{0}?",
"Heb je het echt geprobeerd?"]],
[r'Ik kan niet (.*)',
["Hoe weet je dat je niet kan {0}?",
"Wellicht dat je {0} als je het zou proberen.",
"Wat zou er nodig zijn om je {0} te laten doen?"]],
[r'Ik ben (.*)',
["Kwam je naar mij omdat je {0} bent?",
"Hoe lang ben je al {0}?",
"Hoe voelt het om {0} te zijn?"]],
[r'Ik ben (.*)',
["Hoe voelt het om {0} te zijn?",
"Houdt je ervan om {0}?",
"Waarom vertel je me dat je {0} bent?",
"Waarom denk je dat je {0} bent?"]],
[r'Ben je ([^\?]*)\??',
["Waarvoor maakt het uit of ik {0} ben?",
"Zou je liever willen dat ik niet {0} was?",
"Wellicht dat je geloofd dat ik {0} ben.",
"Misschien ben ik {0} -- Wat denk je ervan?"]],
[r'Wat (.*)',
["Waarom vraag je dat?",
"Hoe zou een antwoord hiermee helpen?",
"Wat denk je ervan"]],
[r'Hoe (.*)',
["Wat stel jij voor?",
"Wellicht kun je je eigen vraag beantwoorden.",
"Wat vraag je eigenlijk precies?"]],
[r'Omdat (.*)',
["Is dat de echte reden?",
"Aan welke andere redenen denk je?",
"Valt deze reden op andere dingen toe te passen?",
"als {0} waar is, wat moet er dan nog meer waar zijn?"]],
[r'(.*) sorry (.*)',
["Het is vaak zo dat er geen excuses nodig is.",
"wat voor gevoelens wekt verontschuldigen bij je op?"]],
[r'Hallo(.*)',
["Hallo... Ik ben blij dat je vandaag langskomt.",
"Hee jij... hoe gaat het met je?",
"Hallo, hoe voel je je vandaag?"]],
[r'Ik denk (.*)',
["Twijfel je aan {0}?",
"Denk je dat echt?",
"Maar je bent niet zeker van {0}?"]],
[r'(.*) vriend (.*)',
["Vertel me meer over je vrienden.",
"Wanneer je denkt aan een vriend, waar denk je dan aan?",
"Waarom vertel je me niet over een vriend uit je kindertijd?"]],
[r'Ja',
["Je lijkt erg zeker van je zaak.",
"OK, maar kun je dat een beetje toelichten?"]],
[r'(.*) computer(.*)',
["Heb je het echt over mij?",
"Voelt het raar om tegen een computer te praten?",
"Hoe laten computers je voelen?",
"Voel je je bedreigt bij computers?"]],
[r'Is het (.*)',
["Denk je dat het {0} is?",
"Wellicht is het {0} -- Wat denk jij?",
"Als het {0} zou zijn, wat zou je dan doen?",
"Het zou best {0} kunnen zijn."]],
[r'Het is (.*)',
["Je lijkt me zeker van je zaak.",
"Wanneer ik je vertel dat het {0} waarschijnlijk niet is, wat zou je dan voelen?"]],
[r'Kan je ([^\?]*)\??',
["Wat laat je denken dat ik niet kan {0}?",
"Als ik kon {0}, wat dan?",
"Waarom vraag je of ik kan {0}?"]],
[r'Kan ik ([^\?]*)\??',
["Misschien wil je niet {0}.",
"Zou je {0} willen kunnen {0}?",
"Als je zou kunnen {0}, zou je dat dan doen?"]],
[r'Je bent (.*)',
["Waarom denk je dat ik {0} ben?",
"Vind je het leuk dat ik {0} ben?",
"Je zou willen dat ik {0} was.",
"Heb je het misschien over jezelf?"]],
[r'Je bent (.*)',
["Waarom zeg je dat ik {0} ben?",
"Waarom denk je dat ik {0} ben?",
"Hebben we het over jou of over mij?"]],
[r'Ik doe niet aan (.*) ',
["Doe je echt niet aan {0}?",
"Waarom doe je niet aan {0}?",
"Zou je willen {0}?"]],
[r'Ik voel me (.*)',
["Okay, vertel me meer over je gevoelens.",
"Voel je je vaak {0}?",
"Wanneer voel je je meestal {0}?",
"Als je je {0} voelt, wat doe je dan?"]],
[r'Ik heb (.*)',
["Waarom vertel je me dat je {0} hebt?",
"Heb je echt {0}?",
"Nu je {0} hebt, wat is het volgende dat je gaat doen?"]],
[r'Ik zou (.*)',
["Kan je misschien uitleggen waarom je zou {0}?",
"Waarom zou je {0}?",
"Wie weet nog meer dat je zou {0}?"]],
[r'Is er (.*)',
["Denk je dat {0} er is?",
"Er is een kans dat {0} er is.",
"Zou je willen dat {0} er zou zijn?"]],
[r'Mijn (.*)',
["Aha, je {0}.",
"Waarom zeg je dat jouw {0}?",
"Hoe voel je je, als jouw {0}?"]],
[r'Jouw (.*)',
["We hebben het over jou, niet over mij.",
"Waarom zeg je dat over mij?",
"Waarom boeit het jou of ik {0}?"]],
[r'Waarom (.*)',
["Waarom vertel jij me niet waarom {0}?",
"Waarom denk je dat {0}?"]],
[r'Ik wil (.*)',
["Wat zou het voor je betekenen, als ik {0}?",
"Waarom wil je {0}?",
"Wat zou je doen als ik {0} zou hebben?",
"Wat zou je doen als je {0} zou hebben?"]],
[r'(.*) moeder(.*)',
["Vertel me meer over je moeder.",
"Hoe zou je je relatie met je moeder beschrijven?",
"Wat vind je van je moeder?",
"Zijn deze gevoelens verwant aan hoe je je vandaag voelt?",
"Een goede relatie met je familie is belangrijk."]],
[r'(.*) vader(.*)',
["Vertel me meer over je vader.",
"Hoe laat je vader je voelen?",
"Wat vind je van je vader?",
"Is de relatie met je vader verwant aan je gevoelens van vandaag?",
"Vind je het moeilijk om je affectief te uiten tegenover je familie?"]],
[r'(.*) kind(.*)',
["Had je goede vrienden als kind?",
"Wat is je favoriete herinnering aan je jeugd?",
"Kan je je dromen of nachtmerries herinneren uit je jeugd?",
"Werd je soms getreitered door andere kinderen?",
"Hoe denk je dat ervaringen uit je jeugd verwant zijn aan je gevoelens van vandaag?"]],
[r'(.*)\?',
["Waarom vraag je dat?",
"Vraag jezelf alsjeblieft of je die vraag zelf kan beantwoorden.",
"Misschien ligt het antwoord bij jezelf?",
"Waarom vertel je me het niet?"]],
[r'stop',
["Bedankt dat je met me gepraat hebt.",
"Dag!",
"Bedankt, dat is dan 150$. Fijne dag verder!"]],
[r'exit',
["Bedankt dat je met me gepraat hebt.",
"Dag!",
"Bedankt, dat is dan 150$. Fijne dag verder!"]],
[r'(.*)',
["Vertel me alsjeblieft meer.",
"Laten we ergens anders over praten. Vertel me bijvoorbeeld eens over je familie.",
"Kan je dat iets meer toelichten?",
"Waarom zeg je dat {0}?",
"Juist ja.",
"Heel interessant.",
"{0}.",
"Aha. En wat verteld dat jou?",
"Hoe laat je dat voelen?",
"Hoe voel je je als je dat zegt?"]]
]
def reflect(fragment):
tokens = fragment.lower().split()
for i, token in enumerate(tokens):
if token in reflections:
tokens[i] = reflections[token]
return ' '.join(tokens)
def analyze(statement):
for pattern, responses in psychobabble:
match = re.match(pattern, statement.rstrip(".!"))
if match:
response = random.choice(responses)
return response.format(*[reflect(g) for g in match.groups()])
def main():
print ("Hoi! Wat leuk dat je met me praat! Als je het gesprek wilt stoppen, typ dan 'stop' of 'exit', of druk op het stopteken."),
print ("")
naam = input("Laten we beginnen met je naam:")
print ("Okay!",naam,", dus. Hoe voel je je vandaag,",naam, "?")
while True:
statement = input("> ")
print (analyze(statement))
if statement == "stop":
break
if statement == "exit":
break
if __name__ == "__main__":
main()
Voor ons schoolproject moesten we een chatbot bepaalde vragen laten beantwoorden. Op dit moment werkt alles, maar we moeten nog implementeren dat er later in het gesprek de ingegeven naam naar voren komt. De robot moet dus later in het gesprek je naam opnieuw gebruiken (die wordt gegeven tijdens het gesprek) op een geschikt moment (de robot zal dus een basisgeheugen moet hebben van delen van het gesprek). We kunnen het niet opgelost krijgen. Kunt u ons helpen? Dat zou geweldig zijn! Bij voorbaat bedankt.
Met vriendelijke groet, Laura
Wat ik al gevonden of geprobeerd heb op pyhton:
import re
import random
reflections = {
"ben": "zijn",
"was": "waren",
"ik": "jij",
"ik zou": "wij zouden",
"ik heb": "jij hebt",
"ik zal" : "men zal",
"mijn": "jouw",
"zijn": "ben",
"jij hebt": "ik heb",
"jij zal": "ik zal",
"jouw": "mijn",
"van jou": "van mij",
"jij": "me",
"mezelf": "jij"
}
psychobabble = [
[r'(.*) Tilburg',
["Tilburg is een stad in Noord-Brabant",
"Waarom wil je wat weten over Tilburg?",
"Tilburg heeft meer dan vijftien miljoen inwoners."]],
[r'(.*) Tilburg University',
["Tilburg University is een universiteit in Tilburg",
"Waarom wil je meer weten over Tilburg University?",
"Tilburg University telt anno 2018 13050 studenten.",
"De campus van Tilburg university ligt in het hartje van Tilburg"]],
[r'Ik heb (.*) nodig',
["Waarom heb je {0} nodig?",
"Zou {0} je echt helpen?",
"Weet je zeker dat je {0} nodig hebt?"]],
[r'Waarom doe je ([^\?]*)\? niet?',
["Denk je echt dat ik {0} niet begrijp?",
"Wellicht dat ik het ooit {0}.",
"Wil je echt dat ik {0}?"]],
[r'Waarom kan ik niet ([^\?]*)\??',
["Denk je dat je in staat zou zijn om {0}?",
"Als je zou kunnen {0}, wat zou je dan doen?",
"Ik weet het niet -- Waarom kan je niet{0}?",
"Heb je het echt geprobeerd?"]],
[r'Ik kan niet (.*)',
["Hoe weet je dat je niet kan {0}?",
"Wellicht dat je {0} als je het zou proberen.",
"Wat zou er nodig zijn om je {0} te laten doen?"]],
[r'Ik ben (.*)',
["Kwam je naar mij omdat je {0} bent?",
"Hoe lang ben je al {0}?",
"Hoe voelt het om {0} te zijn?"]],
[r'Ik ben (.*)',
["Hoe voelt het om {0} te zijn?",
"Houdt je ervan om {0}?",
"Waarom vertel je me dat je {0} bent?",
"Waarom denk je dat je {0} bent?"]],
[r'Ben je ([^\?]*)\??',
["Waarvoor maakt het uit of ik {0} ben?",
"Zou je liever willen dat ik niet {0} was?",
"Wellicht dat je geloofd dat ik {0} ben.",
"Misschien ben ik {0} -- Wat denk je ervan?"]],
[r'Wat (.*)',
["Waarom vraag je dat?",
"Hoe zou een antwoord hiermee helpen?",
"Wat denk je ervan"]],
[r'Hoe (.*)',
["Wat stel jij voor?",
"Wellicht kun je je eigen vraag beantwoorden.",
"Wat vraag je eigenlijk precies?"]],
[r'Omdat (.*)',
["Is dat de echte reden?",
"Aan welke andere redenen denk je?",
"Valt deze reden op andere dingen toe te passen?",
"als {0} waar is, wat moet er dan nog meer waar zijn?"]],
[r'(.*) sorry (.*)',
["Het is vaak zo dat er geen excuses nodig is.",
"wat voor gevoelens wekt verontschuldigen bij je op?"]],
[r'Hallo(.*)',
["Hallo... Ik ben blij dat je vandaag langskomt.",
"Hee jij... hoe gaat het met je?",
"Hallo, hoe voel je je vandaag?"]],
[r'Ik denk (.*)',
["Twijfel je aan {0}?",
"Denk je dat echt?",
"Maar je bent niet zeker van {0}?"]],
[r'(.*) vriend (.*)',
["Vertel me meer over je vrienden.",
"Wanneer je denkt aan een vriend, waar denk je dan aan?",
"Waarom vertel je me niet over een vriend uit je kindertijd?"]],
[r'Ja',
["Je lijkt erg zeker van je zaak.",
"OK, maar kun je dat een beetje toelichten?"]],
[r'(.*) computer(.*)',
["Heb je het echt over mij?",
"Voelt het raar om tegen een computer te praten?",
"Hoe laten computers je voelen?",
"Voel je je bedreigt bij computers?"]],
[r'Is het (.*)',
["Denk je dat het {0} is?",
"Wellicht is het {0} -- Wat denk jij?",
"Als het {0} zou zijn, wat zou je dan doen?",
"Het zou best {0} kunnen zijn."]],
[r'Het is (.*)',
["Je lijkt me zeker van je zaak.",
"Wanneer ik je vertel dat het {0} waarschijnlijk niet is, wat zou je dan voelen?"]],
[r'Kan je ([^\?]*)\??',
["Wat laat je denken dat ik niet kan {0}?",
"Als ik kon {0}, wat dan?",
"Waarom vraag je of ik kan {0}?"]],
[r'Kan ik ([^\?]*)\??',
["Misschien wil je niet {0}.",
"Zou je {0} willen kunnen {0}?",
"Als je zou kunnen {0}, zou je dat dan doen?"]],
[r'Je bent (.*)',
["Waarom denk je dat ik {0} ben?",
"Vind je het leuk dat ik {0} ben?",
"Je zou willen dat ik {0} was.",
"Heb je het misschien over jezelf?"]],
[r'Je bent (.*)',
["Waarom zeg je dat ik {0} ben?",
"Waarom denk je dat ik {0} ben?",
"Hebben we het over jou of over mij?"]],
[r'Ik doe niet aan (.*) ',
["Doe je echt niet aan {0}?",
"Waarom doe je niet aan {0}?",
"Zou je willen {0}?"]],
[r'Ik voel me (.*)',
["Okay, vertel me meer over je gevoelens.",
"Voel je je vaak {0}?",
"Wanneer voel je je meestal {0}?",
"Als je je {0} voelt, wat doe je dan?"]],
[r'Ik heb (.*)',
["Waarom vertel je me dat je {0} hebt?",
"Heb je echt {0}?",
"Nu je {0} hebt, wat is het volgende dat je gaat doen?"]],
[r'Ik zou (.*)',
["Kan je misschien uitleggen waarom je zou {0}?",
"Waarom zou je {0}?",
"Wie weet nog meer dat je zou {0}?"]],
[r'Is er (.*)',
["Denk je dat {0} er is?",
"Er is een kans dat {0} er is.",
"Zou je willen dat {0} er zou zijn?"]],
[r'Mijn (.*)',
["Aha, je {0}.",
"Waarom zeg je dat jouw {0}?",
"Hoe voel je je, als jouw {0}?"]],
[r'Jouw (.*)',
["We hebben het over jou, niet over mij.",
"Waarom zeg je dat over mij?",
"Waarom boeit het jou of ik {0}?"]],
[r'Waarom (.*)',
["Waarom vertel jij me niet waarom {0}?",
"Waarom denk je dat {0}?"]],
[r'Ik wil (.*)',
["Wat zou het voor je betekenen, als ik {0}?",
"Waarom wil je {0}?",
"Wat zou je doen als ik {0} zou hebben?",
"Wat zou je doen als je {0} zou hebben?"]],
[r'(.*) moeder(.*)',
["Vertel me meer over je moeder.",
"Hoe zou je je relatie met je moeder beschrijven?",
"Wat vind je van je moeder?",
"Zijn deze gevoelens verwant aan hoe je je vandaag voelt?",
"Een goede relatie met je familie is belangrijk."]],
[r'(.*) vader(.*)',
["Vertel me meer over je vader.",
"Hoe laat je vader je voelen?",
"Wat vind je van je vader?",
"Is de relatie met je vader verwant aan je gevoelens van vandaag?",
"Vind je het moeilijk om je affectief te uiten tegenover je familie?"]],
[r'(.*) kind(.*)',
["Had je goede vrienden als kind?",
"Wat is je favoriete herinnering aan je jeugd?",
"Kan je je dromen of nachtmerries herinneren uit je jeugd?",
"Werd je soms getreitered door andere kinderen?",
"Hoe denk je dat ervaringen uit je jeugd verwant zijn aan je gevoelens van vandaag?"]],
[r'(.*)\?',
["Waarom vraag je dat?",
"Vraag jezelf alsjeblieft of je die vraag zelf kan beantwoorden.",
"Misschien ligt het antwoord bij jezelf?",
"Waarom vertel je me het niet?"]],
[r'stop',
["Bedankt dat je met me gepraat hebt.",
"Dag!",
"Bedankt, dat is dan 150$. Fijne dag verder!"]],
[r'exit',
["Bedankt dat je met me gepraat hebt.",
"Dag!",
"Bedankt, dat is dan 150$. Fijne dag verder!"]],
[r'(.*)',
["Vertel me alsjeblieft meer.",
"Laten we ergens anders over praten. Vertel me bijvoorbeeld eens over je familie.",
"Kan je dat iets meer toelichten?",
"Waarom zeg je dat {0}?",
"Juist ja.",
"Heel interessant.",
"{0}.",
"Aha. En wat verteld dat jou?",
"Hoe laat je dat voelen?",
"Hoe voel je je als je dat zegt?"]]
]
def reflect(fragment):
tokens = fragment.lower().split()
for i, token in enumerate(tokens):
if token in reflections:
tokens[i] = reflections[token]
return ' '.join(tokens)
def analyze(statement):
for pattern, responses in psychobabble:
match = re.match(pattern, statement.rstrip(".!"))
if match:
response = random.choice(responses)
return response.format(*[reflect(g) for g in match.groups()])
def main():
print ("Hoi! Wat leuk dat je met me praat! Als je het gesprek wilt stoppen, typ dan 'stop' of 'exit', of druk op het stopteken."),
print ("")
naam = input("Laten we beginnen met je naam:")
print ("Okay!",naam,", dus. Hoe voel je je vandaag,",naam, "?")
while True:
statement = input("> ")
print (analyze(statement))
if statement == "stop":
break
if statement == "exit":
break
if __name__ == "__main__":
main()