Added Eliza style bot.

This commit is contained in:
José Carlos Cuevas 2017-05-18 23:37:01 +02:00
parent 6e61e682c4
commit f33be4be9a
3 changed files with 253 additions and 1 deletions

0
__init__.py Normal file
View file

View file

@ -10,6 +10,7 @@ from telegram.ext import (Updater, CommandHandler, MessageHandler,
Filters)
from config import config
from simphaty import analyze
from chatterbot import ChatBot
@ -47,7 +48,11 @@ def randomchat(bot, update):
if not user_name or user_name == '':
user_name = 'humano'
reply = chatbot.get_response(msg)
if random.randint(0, 100) <= 25:
reply = analyze(msg)
else:
reply = chatbot.get_response(msg)
if "te rieh" in msg or random.randint(0, 100) < 5:
if "te rieh" in reply.text:

247
simphaty.py Normal file
View file

@ -0,0 +1,247 @@
# -*- coding: UTF-8 -*-
import re
import random
# reflejos sobre el sujeto
reflections = {
"estoy": "estas",
"soy": "eres",
"fui": "fuiste",
"yo": "tu",
"deberia": "deberias",
"tengo": "tendriass",
"quiero": "quieres",
"mio": "tuyo",
"eres": "soy",
"tu tienes": "yo tengo",
"tu seras": "yo sere",
"tuyo": "mio",
"vuestro": "nuestro",
"sobre ti": "sobre mi",
"sobre mi": "sobre ti"
}
# patrones psicologicos más probables
psychobabble = [
[r'necesito(.*)',
["¿Por qué necesita {0}?",
"¿Realmente te ayudaría a obtener {0}?",
"¿Está seguro de que necesita {0}?"]],
[r'por que no puedes ([^\?]*)\??' or r'por qué no puedes ([^\?]*)\??',
["¿De verdad crees que no lo hago? {0}?",
"Tal vez eventualmente lo haré. {0}.",
"¿De verdad quieres que yo {0}?"]],
[r'¿Por que no puedo ([^\?]*)\??' or r'por que no puedo ([^\?]*)\??' or r'¿Por qué no puedo ([^\?]*)\??' or r'Por qué no puedo ([^\?]*)\??',
["¿Crees que deberías ser capaz de {0}?",
"Si pudieras {0}, ¿qué harías?",
"No sé - ¿por qué no puedes {0}?",
"¿Lo has intentado realmente?",
"Si no eres capaz de {0} entonces eso te define cómo un autentico marica!"]],
[r'no puedo(.*)',
["¿Cómo sabes que no puedes{0}?",
"Tal vez podría {0} si lo intentó.",
"¿Qué se necesita para que usted {0}?"]],
[r'yo soy (.*)',
["¿Has venido a mí porque eres {0}?",
"¿Cuánto tiempo has estado {0}?",
"¿Cómo te sientes acerca de ser {0}?"]],
[r'estoy (.*)',
["¿Cómo te hace sentir{0}?",
"¿Te gusta ser {0}?",
"¿Por qué me dices que eres{0}?",
"¿Por qué crees que eres {0}?"]],
[r'¿ ([^\?]*)\??',
["¿Por qué importa si soy {0}?",
"¿Lo preferirías si no fuera {0}?",
"Tal vez usted piensa que soy.",
"Puedo ser {0} - ¿qué piensas?"]],
[r'¿qué (.*)' or r'qué (.*)' or r'que (.*)',
["¿Por qué preguntas?",
"¿Cómo le ayudaría una respuesta a eso?",
"¿Qué piensas?"]],
[r'¿cómo (.*)' or r'cómo (.*)' or r'como (.*)',
["¿Cómo se supone?",
"Tal vez puedas responder a tu propia pregunta.",
"¿Qué estás realmente pidiendo?"]],
[r'porque (.*)',
["¿Es esa la verdadera razón?",
"¿Qué otras razones vienen a la mente?",
"¿Esa razón se aplica a cualquier otra cosa?",
"Si {0}, ¿qué otra cosa debe ser verdadera?"]],
[r'(.*) lo siento (.*)',
["Hay muchas veces cuando no se necesita disculpa.",
"¿Qué sentimientos tiene cuando se disculpa?"]],
[r'hola(.*)',
["Hola ... me alegro de que puedas pasar por hoy.",
"¿Hola, cómo estas hoy?",
"Hola, ¿cómo te sientes hoy?"]],
[r'pienso (.*)',
["¿Dudas {0}?",
"¿De verdad piensas eso?",
"Pero no estás seguro {0}?"]],
[r'(.*) amigo (.*)',
["Cuéntame más sobre tus amigos.",
"Cuando piensas en un amigo, ¿qué te viene a la mente?",
"¿Por qué no me hablas de un amigo desde la infancia?"]],
[r'si',
["Pareces muy seguro.",
"Está bien, pero ¿puedes hacer algo?"]],
[r'(.*) ordenador(.*)',
["¿De verdad estás hablando de mí?",
"¿Parece extraño hablar con una computadora?",
"¿Cómo te hacen sentir las computadoras?",
"¿Se siente amenazado por las computadoras?"]],
[r'eso es (.*)',
["¿Crees que es {0}?",
"Tal vez sea {0} - ¿qué piensas?",
"Si fuera {0}, ¿qué harías?",
"Podría ser que {0}."]],
[r'es eso (.*)',
["Pareces muy seguro.",
"Si te dijera que probablemente no es {0}, ¿qué sentirías?"]],
[r'¿puedes ([^\?]*)\??',
["¿Qué te hace pensar que no puedo {0}?",
"Si pudiera {0}, ¿entonces qué?",
"¿Por qué me preguntas si puedo (0)?"]],
[r'puedo ([^\?]*)\??',
["No puedes querer {0}.",
"¿Quieres ser capaz de {0}?",
"Si pudieras {0}, ¿cierto?"]],
[r'tu eres (.*)' or r'¿tu eres (.*)',
["¿Por qué crees que soy {0}?",
"¿Te gusta pensar que soy {0}?",
"Tal vez usted quiere que sea.",
"¿Tal vez estás hablando de ti?"]],
[r'¿eres ture (.*)',
["¿Por qué dices que soy {0}?",
"¿Por qué crees que soy {0}?",
"¿Estamos hablando de ti o de mí?"]],
[r'¿no lo hago (.*)',
["No realmente {0}?",
"¿Por qué no {0}?",
"¿Quieres {0}?"]],
[r'me siento (.*)',
["Bueno, cuéntame más sobre estos sentimientos.",
"¿Sientes a menudo {0}?",
"¿Cuándo sientes normalmente {0}?",
"Cuando sientes {0}, ¿qué haces?"]],
[r'yo tengo (.*)',
["¿Por qué me dices que tienes {0}?",
"¿Realmente tienes {0}?",
"Ahora que tienes {0}, ¿qué harás después?"]],
[r'yo debo (.*)',
["¿Podría explicar por qué lo haría?",
"¿Por que lo harias?",
"¿Quién más sabe que lo harías?"]],
[r'esta ahí (.*)',
["¿Crees que hay {0}?",
"Es probable que haya {0}.",
"¿Te gustaría tener {0}?"]],
[r'mi (.*)',
["Ya veo, tu {0}.",
"¿Por qué dices que tu {0}?",
"Cuando tu {0}, ¿cómo te sientes?"]],
[r'tu (.*)',
["debemos estar discutiendo contigo, no conmigo.",
"¿Por qué dices eso de mí?",
"¿Por qué te importa si yo {0}?"]],
[r'por qué (.*)',
["¿Por qué no me dices la razón por la cual {0}?",
"¿Por qué crees que {0}?"]],
[r'quiero que (.*)',
["¿Qué significaría para ti si tienes {0}?",
"¿Por qué quieres {0}?",
"¿Qué harías si tuvieras {0}?",
"Si tienes {0}, entonces ¿qué harías?"]],
[r'(.*) madre(.*)',
["Cuéntame más sobre tu madre.",
"¿Cómo era tu relación con tu madre?",
"¿Cómo te sientes con tu madre?",
"¿Cómo se relaciona esto con tus sentimientos hoy?",
"Las buenas relaciones familiares son importantes."]],
[r'(.*) padre(.*)',
["Cuéntame más sobre tu padre.",
"¿Cómo te hizo sentir tu padre?",
"¿Cómo te sientes con tu padre?",
"¿Su relación con su padre se relaciona con sus sentimientos hoy?",
"¿Tiene problemas para mostrar afecto con su familia?"]],
[r'(.*) niño(.*)',
["¿Tenías amigos íntimos cuando era niño?",
"¿Cuál es tu recuerdo favorito de la niñez?",
"¿Recuerdas algún sueño o pesadilla desde la infancia?",
"¿Alguna vez te han molestado los otros niños?",
"¿Cómo crees que tus experiencias infantiles se relacionan con tus sentimientos hoy?"]],
[r'(.*)\?',
["¿Porque preguntas eso?",
"Por favor, considere si puede responder a su propia pregunta.",
"¿Quizás la respuesta está dentro de ti?",
"¿Por qué no me lo dices?"]],
[r'adios',
["Gracias por hablar conmigo.",
"Adiós.",
"Gracias, eso será $ 150. ¡Que tengas un buen día!"]],
[r'(.*)',
["Por favor, cuéntame más.",
"Vamos a cambiar de enfoque un poco ... Háblame de tu familia.",
"¿Puedes profundizar sobre eso?",
"¿Por qué dices eso {0}?",
"Ya veo.",
"Muy interesante.",
"{0}.",
"Ya veo, ¿y qué te dice eso?",
"¿Cómo te hace sentir eso?",
"¿Cómo te sientes cuando dices eso?"]]
]
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()])