--35.답변 데이터베이스 구축.ipynb--
테이블명 : chatbot_train_data
| 컬럼 | 속성 | 설명 |
|---|---|---|
| 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 |
./config/DatabaseConfig.py
import sqlite3
from config.DatabaseConfig import *
con = None
try:
con = sqlite3.connect(DB_FILE)
print('DB 연결 성공')
sql = '''
CREATE TABLE IF NOT EXISTS chatbot_train_data (
id INTEGER PRIMARY KEY,
intent TEXT,
ner TEXT,
query TEXT,
answer TEXT NOT NULL,
answer_image TEXT
)
'''
cur = con.cursor()
cur.execute(sql)
print('테이블 생성 성공')
except Exception as e:
print('예외발생', e)
finally:
if con:
con.close()
print('DB 연결 닫기 성공')
con = None
base_path = r'/content/drive/MyDrive/dataset/chatbot'
import pandas as pd
import os
df = pd.read_excel(os.path.join(base_path, 'train_data.xlsx'))
df
각 컬럼에 대한 설명
| 컬럼 | 설명 |
|---|---|
| 의도(Intent) | 질문의 의도를 나타내는 텍스트, 의도가 없는 경우 비워둡니다 |
| 개체명인식(NER) | 질문에 필요한 개체명, 개체명이 없는 경우 비워둡니다 |
| 질문(Query) | 질문텍스트 |
| 답변(Answer) | 답변텍스트 |
| 답변이미지 | 답변에 들어갈 이미지URL, 이미지 URL이 없는 경우 비워둡니다 |
import openpyxl
def all_clear_train_data(con) :
sql = '''
DELETE FROM chatbot_train_data
'''
cur = con.cursor()
cur.execute(sql)
con.commit()
def insert_data(con, xls_row) :
intent, ner, query, answer, answer_img_url = xls_row
sql = '''
INSERT INTO chatbot_train_data(intent, ner, query, answer, answer_image)
VALUES(
'%s', '%s', '%s', '%s', '%s'
)
''' % (intent.value, ner.value, query.value, answer.value, answer_img_url.value)
sql = sql.replace("'None'", "null")
cur = con.cursor()
cur.execute(sql)
print(f'{query.value} 저장')
con.commit()
train_file = os.path.join(base_path, 'train_data.xlsx')
con = None
try:
con = sqlite3.connect(DB_FILE)
print("DB 연결 성공")
all_clear_train_data(con)
wb = openpyxl.load_workbook(train_file)
sheet = wb['Sheet1'] # 특정 Sheet 불러오기
for row in sheet.iter_rows(min_row=2) : # 헤더(feature)는 불러오지 않음
# 데이터 저장
insert_data(con, row)
except Exception as e:
print('예외발생', e)
finally:
if con:
con.close()
print("DB 연결 닫기 성공")
con = None