import logging
from chatterbot.logic import LogicAdapter
from nltk import pos_tag
from sugaroid.brain.constants import (
WHO_AM_I,
WHO_ARE_YOU,
SUGAROID,
GREET,
BURN_IDK,
I_AM,
)
from sugaroid.brain.ooo import Emotion
from sugaroid.brain.postprocessor import random_response
from sugaroid.brain.preprocessors import normalize, spac_token
from sugaroid.core.statement import SugaroidStatement
from sugaroid.version import VERSION
[docs]class MyNameAdapter(LogicAdapter):
"""
Handles sentences featuring 'my' and 'name'
"""
def __init__(self, chatbot, **kwargs):
super().__init__(chatbot, **kwargs)
[docs] def can_process(self, statement):
self.normalized = normalize(str(statement))
self.token = pos_tag(self.normalized)
if str(statement).strip().lower().startswith("my name is"):
return True
else:
return False
[docs] def process(self, statement, additional_response_selection_parameters=None):
confidence = 1
# FIXME Creates unusual response
nl = spac_token(statement, chatbot=self.chatbot)
for i in nl:
if (i.lower_ == "my") or (i.lemma_ == "be") or (i.lower_ == "name"):
continue
logging.info("{} {}".format(i, i.pos_))
if (i.pos_ == "NOUN") or (i.pos_ == "PROPN"):
response = random_response(GREET).format(str(i.text).capitalize())
selected_statement = SugaroidStatement(response, chatbot=True)
selected_statement.confidence = confidence
emotion = Emotion.positive
selected_statement.emotion = emotion
self.chatbot.globals["USERNAME"] = i.text
return selected_statement
else:
response = ":)"
confidence = 0
selected_statement = SugaroidStatement(response, chatbot=True)
selected_statement.confidence = confidence
emotion = Emotion.neutral
selected_statement.emotion = emotion
return selected_statement