from utils.Database import Database from utils.BotServer import BotServer from utils.Preprocess import Preprocess from models.intent.IntentModel import IntentModel from models.ner.NerModel import NerModel from utils.FindAnswer import FindAnswer # 전처리 객체 생성 p = Preprocess(word2index_dic='train_tools/dict/chatbot_dict.bin', userdic='utils/user_dic.tsv') # 의도 파악 모델 intent = IntentModel(model_name='models/intent/intent_model.h5', proprocess=p) # 개체명 인식 모델 ner = NerModel(model_name='models/ner/ner_model.h5', proprocess=p) def to_client(conn, addr, params): db = params['db'] try: db.connect() # 디비 연결 # 데이터 수신 read = conn.recv(2048) # 수신 데이터가 있을 때 까지 블로킹 print('===========================') print('Connection from: %s' % str(addr)) if read is None or not read: # 클라이언트 연결이 끊어지거나, 오류가 있는 경우
from utils.Preprocess import Preprocess from models.ner.NerModel import NerModel p = Preprocess(word2index_dic='../train_tools/dict/chatbot_dict.bin', userdic='../utils/user_dic.tsv') ner = NerModel(model_name='../models/ner/ner_model.h5', preprocess=p) query = input() predicts = ner.predict(query) print(predicts)
# query = "오전에 탕수육 10개 주문합니다" # query = "화자의 질문 의도를 파악합니다." # query = "안녕하세요" query = "자장면 주문할게요" # 의도 파악 from models.intent.IntentModel import IntentModel intent = IntentModel(model_name='models/intent/intent_model.h5', proprocess=p) predict = intent.predict_class(query) intent_name = intent.labels[predict] # 개체명 인식 from models.ner.NerModel import NerModel ner = NerModel(model_name='models/ner/ner_model.h5', proprocess=p) predicts = ner.predict(query) ner_tags = ner.predict_tags(query) print("질문 : ", query) print("=" * 100) print("의도 파악 : ", intent_name) print("개체명 인식 : ", predicts) print("답변 검색에 필요한 NER 태그 : ", ner_tags) print("=" * 100) # 답변 검색 from utils.FindAnswer import FindAnswer try: f = FindAnswer(db)
def to_client(conn, addr, params): db = params['db'] try: db.connect() read = conn.recv(2048) # 수신 데이터가 있을 때까지 블로킹 print('==========================') print('Connection from: %s' % str(addr)) if read is None or not read: print('클라이언트 연결 끊어짐') exit(0) #스레드 강제 종료 #json 데이터로 변환 recv_json_data = json.loads(read.decode()) print("데이터 수신 : ", recv_json_data) query = recv_json_data['Query'] #의도 파악 intent = IntentModel(model_name='models/intent/intent_model.h5', proprocess=p) predict = intent.predict_class(query) intent_name = intent.labels[predict] #개체명 파악 ner = NerModel(model_name='models/ner/ner_model.h5', proprocess=p) predicts = ner.predict(query) ner_tags = ner.predict_tags(query) #답변 검색 try: if intent_name == "음식점추천" and ner_tags == None: answer = "해당 음식 맛집을 찾지 못했어요 ㅠㅠ 다른 음식을 입력해주세요" answer_image = ' ' else: f = FindAnswer(db) answer_text, answer_image = f.search(intent_name, ner_tags, predicts) answer = f.tag_to_word(predicts, answer_text) except: answer = "죄송해요… 무슨 말씀이신지 모르겠어요…!!" answer_image = None send_json_data_str = { "Query": query, "Answer": answer, "AnswerImageUrl": answer_image, "Intent": intent_name, "NER": str(predicts) } message = json.dumps(send_json_data_str) #json 객체를 전송 가능한 문자열로 변환 conn.send(message.encode()) #응답 전송 except Exception as ex: print(ex) finally: if db is not None: #db 연결 끊기 db.close() conn.close()