Exemplo n.º 1
0
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)
        print("데이터 수신 : ", recv_json_data)
        query = recv_json_data['Query']
        # print(query) 여기 까지는 정상적으로 작동
        # 의도 파악
        intent_predict = intent.predict_class(query)
        intent_name = intent.labels[intent_predict]
        print(intent_name)
        # 개체명 파악
        ner_predicts = ner.predict(query)
        ner_tags = ner.predict_tags(query)

        # 답변 검색
        try:
            f = FindAnswer(db)
            answer_text, answer_image = f.search(intent_name, ner_tags)
            answer = f.tag_to_word(ner_predicts, answer_text)

        except:
            answer = "죄송해요 무슨 말인지 모르겠어요. 조금 더 공부 할게요."
            answer_image = None

        send_json_data_str = {
            "Query": query,
            "Answer": answer,
            "AnswerImageUrl": answer_image,
            "Intent": intent_name,
            "NER": str(ner_predicts)
        }
        message = json.dumps(send_json_data_str)
        print(message.encode())
        conn.send(message.encode())

    except Exception as ex:
        print(ex)
        print("여기")
    finally:
        if db is not None:  # db 연결 끊기
            db.close()
        conn.close()
Exemplo n.º 2
0
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) # thread 강제 종료

        # json data로 변환
        recv_json_data = json.loads(read.decode())
        print("데이터 수신 : ", recv_json_data)
        query = recv_json_data['Query']

        # 의도 파악
        intent_predict = intent.predict_class(query)
        intent_name = intent.labels[intent_predict]

        # 개체명 파악
        ner_predicts = ner.predict(query)
        ner_tags = ner.predict_tags(query)

        # 답변 검색
        try:
            f = FindAnswer(db)
            answer_text = f.search(intent_name, ner_tags)
            answer = f.tag_to_word(ner_predicts, answer_text)

        except:
            answer = "무슨 말인지 모르겠어요, 공부가 필요합니다"

        send_json_data_str = {"Query": query,
                              "Answer": answer,
                              "Intent": intent_name,
                              "NER": str(ner_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()
Exemplo n.º 3
0
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)
    answer_text, answer_image = f.search(intent_name, ner_tags)
    answer = f.tag_to_word(predicts, answer_text)
except:
    answer = "죄송해요 무슨 말인지 모르겠어요"

print("답변 : ", answer)

db.close()  # 디비 연결 끊음
Exemplo n.º 4
0
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()