Source code for chatbot.nlp.intend_analyzer
#from cluster.service.service_predict_seq2seq import PredictNetSeq2Seq
from cluster.service.service_predict_wcnn import PredictNetWcnn
from chatbot.common.chat_share_data import ShareData
import logging
[docs]class IntendAnalyzer(ShareData):
"""
parse raw text to tageed, entity filterd sentence
※ Example
input : I bought a car yesterday
output : I bought a car [time]
"""
def __init__(self, cb_id, nn_id):
"""
init global variables
"""
self.cb_id = cb_id
self.nn_id = nn_id
#self.seq2seq_model = PredictNetSeq2Seq()
self.wcnn_model = PredictNetWcnn()
[docs] def parse(self, share_data, type):
"""
run intent analyzer
:param context:
:return:
"""
if (share_data.get_intent_id() != ""):
logging.info("■■■■■■■■■■ 의도 존재 : " + share_data.get_intent_id())
else :
if(type == 'Rule'):
convert_data = share_data.get_convert_dict_data()
logging.info("■■■■■■■■■■ Rule 의도 분석 Input Data : " + ' '.join(convert_data))
intent_model = self.get_intent_model(' '.join(convert_data))
logging.info("■■■■■■■■■■ Rule 의도 분석 결과(Model) : " + intent_model)
share_data.set_pattern_intent_id([intent_model])
share_data.set_intent_history({"P": intent_model})
elif(type == 'NER'):
convert_data = share_data.get_convert_data()
logging.info("■■■■■■■■■■ NER 의도 분석 Input Data : " + ' '.join(convert_data))
intent_model = self.get_intent_model(' '.join(convert_data))
logging.info("■■■■■■■■■■ NER 의도 분석 결과(Model) : " + intent_model)
share_data.set_intent_id([intent_model])
share_data.set_intent_history({"i" : intent_model})
return share_data
[docs] def get_intent_model(self, convert_data):
intent_model = str(self.wcnn_model.run(self.nn_id, {"input_data": convert_data, "num": 0, "clean_ans": False})[0])
return intent_model