Source code for chatbot.nlp.rule_intent_analyzer
from chatbot.common.chat_share_data import ShareData
import logging
[docs]class RuleIntentAnalyzer(ShareData):
def __init__(self, intent_conf):
self.intent_conf = intent_conf
[docs] def parse(self, share_data):
if (share_data.get_intent_id() != ""):
logging.info("■■■■■■■■■■ 의도 존재 : " + share_data.get_intent_id())
else :
rule_exist = False
intent_rule = self.get_rule_intent(share_data.get_request_data(), share_data)
logging.info("■■■■■■■■■■ 의도 분석 결과(Rule) : " + str(intent_rule))
if(intent_rule != ""):
share_data.set_intent_id([intent_rule])
share_data.set_intent_history(intent_rule)
rule_exist = True
return rule_exist
[docs] def get_rule_intent(self, input_data, share_data):
intent_rule = ""
for row in self.intent_conf:
if(row['fields']['nn_type'] == 'start'):
if(len(list(filter(lambda x: input_data.startswith(x) ,row["fields"]["rule_value"]["key"]))) == 1):
intent_rule = row["pk"]
for key in row["fields"]["rule_value"]["key"]:
if (input_data.count(key) > 0):
input_data = input_data.replace(key, '').strip()
break
share_data.set_story_slot_entity(row["fields"]["rule_value"]["tag"], [input_data])
break
elif (row['fields']['nn_type'] == 'like'):
if(len(list(filter(lambda x: input_data.find(x)>-1 ,row["fields"]["rule_value"]["key"]))) == 1):
intent_rule = row["pk"]
for key in row["fields"]["rule_value"]["key"]:
if (input_data.startswith(key) is True):
input_data = input_data.replace(key, '').strip()
break
elif (input_data.count(key) > 0):
input_data = input_data[0:input_data.index(key)].strip()
break
share_data.set_story_slot_entity(row["fields"]["rule_value"]["tag"], [input_data])
break
else:
intent_rule = ""
pass
return intent_rule