chatbot
칼럼 | 속성 | 설명 |
---|---|---|
id | int primary key not null | 학습 데이터 id |
intent | varchar(45) | 의도명, 의도가 없는 경우 null |
ner | varchar(45) | 개체명, 개체명이 없는 경우 null |
query | text null | 질문 텍스트 |
answer | text not null | 답변 텍스트 |
answer_image | varchar(2048) | 답변에 들어갈 이미지 URL, 이미지 URL 을 사용하지 않을 경우 null |
import pymysql
db = None
try:
db = pymysql.connect(
host="127.0.0.1",
user="homestead",
passwd="12test34",
db="homestead",
charset='utf8'
)
# 테이블 생성 sql 정의
sql='''
CREATE TABLE IF NOT EXISTS `chatbot_train_data`(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`intent` VARCHAR(45) NULL,
`ner` VARCHAR(1024) NULL,
`query` TEXT NULL,
`answer` TEXT NOT NULL,
`answer_image` VARCHAR(2048) NULL,
PRIMARY KEY(`id`))
ENGINE = InnoDB DEFAULT CHARSET=utf8
'''
# 테이블 생성
with db.cursor() as cursor:
cursor.execute(sql)
except Exception as e:
print(e)
finally:
if db is not None:
db.close()
칼럼 | 속성 |
---|---|
의도(Intent) | 질문의 의도를 나타내는 텍스트, 의도가 없는 경우 NULL |
개체명 인식(NER) | 질문에 필요한 개체명, 개체명이 없는 경우 NULL |
질문(Query) | 질문 텍스트 |
답변(Answer) | 답변 택스트 |
답변 이미지 | 답변에 들어갈 이미지 URL, 이미지 URL이 없는 경우 NULL |
# 필요한 모듈 임포트
import pymysql
import openpyxl
# 학습 데이터 초기화
def all_clear_train_data(db):
# 기존 학습 데이터 삭제
sql='''
delete from chatbot_train_data
'''
with db.cursor() as cursor:
cursor.execute(sql)
# auto increment 초기화
sql='''
ALTER TABLE chatbot_train_data AUTO_INCREMENT=1
'''
with db.cursor() as cursor:
cursor.execute(sql)
# db에 데이터 저장
def insert_data(db, xls_row):
intent, ner, query, answer, answer_img_url = xls_row
sql='''
INSERT chatbot_train_data(intent, ner, query, answer, answer_img_url)
values(
'%s', '%s', '%s', '%s', '%s'
)
''' % (intent.value, ner.value, query.value, answer.value, answer_img_url.value)
# 엑셀에서 불러온 cell에 데이터가 없는 경우 null로 치환
sql = sql.replace("'None'", "null")
with db.cursor() as cursor:
cursor.execute(sql)
print('{} 저장'.format(query.value))
db.commit()
# 학습 엑셀 파일 선언
train_file = './train_data.xlsx'
db = None
try:
db = pymysql.connect(
host="127.0.0.1",
user="homestead",
passwd="12test34",
db="homestead",
charset='utf8'
)
# 기존 학습 데이터 초기화
all_clear_train_data(db)
# 학습 엑셀 파일 불러오기
wb = openpyxl.load_workbook(train_file)
sheet = wb['Sheet1']
for row in sheet.iter_rows(min_row=2): # 헤더는 불러오지 않음
# 데이터 저장
insert_data(db, row)
wb.close()
except Exception as e:
print(e)
finally:
if db is not None:
db.close()
당신의 시간이 헛되지 않는 글이 되겠습니다.
I'll write something that won't waste your time.