DB를 이용한 정보검색기 구현 (sqlite3) IS lab. 김건영 http://hagazzusa.github.io/
1주전에 한 내용 Sed/awk를 이용한 문서 가공 Porter stemming 적용 tf-idf 를 사용하여 AP-88 데이터셋에 대하여 scoring
오늘 할거 Sed/awk를 이용한 문서 가공 (Dictionary대신 DB사용) Porter stemming 적용 tf-idf 를 사용하여 AP-88 데이터셋에 대하여 scoring (평가 툴을 사용하여 성능 확인)
SQLITE3 사용 Sqlite는 별도의 DB서버가 필요 없이 DB파일에 기초하 여 DB처리를 구현한 SQL DB엔진이다.
Posting list 사전 구조 -> DB table Post_list = { “term”:{“docs”: {STR:INT}, “doc_freq”: INT, “col_freq”: INT} … } TERMS DOCS TERMS 테이블은 없어도 된다. Term을 기준으로 doc_freq은 DOCS에서 doc_id를 COUNT col_freq는 DOCS에서 freq를 SUM하면 되기에, 다만 DOCS만 쓴다면 매번 계산해야 되므로 미리 만들어두자. term doc_freq col_freq term doc_id freq
SQLITE3 DB생성 Tfidfscorer.py가 있는 폴더에서 테이블 3 개를 만든다. .이 앞에 붙는 명령어들은 sqlite고유 명령어로 .table은 현재 생성된 테이블들을 보여준다.
SQLITE3 데이터 추가 및 삭제 (‘test’, 1, 1)추가 Term=‘test’인 행 삭제 .exit 명령어를 쓰면 빠져나올 수 있다.
Python에서 sqlite3 사용 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import sqlite3 # SQLite DB 연결 conn = sqlite3.connect("tfidf.db") # Connection 으로부터 Cursor 생성 cur = conn.cursor() # SQL 쿼리 실행 cur.execute(“SELECT * FROM TERMS") # 데이타 Fetch rows = cur.fetchall() for row in rows: print(row) # Connection 닫기 conn.close()
Paramterized query 위와 같은 query는 아래 두가지 방법으로 대체 가능하다. ? Place holder (앞에서부터 순서대로) Named place holder (키-밸류) sql = "select * from customer where category=1 and region=‘SEA’" Cur.execute(sql) sql = "select * from customer where category=? and region=?" Cur.execute(sql, (1, ‘SEA’)) sql = "select * from customer where category= :ca and region= :re" Cur.execute(sql, {‘ca’:1, ‘re’:’SEA”})
Dictionary to DB File_to_dict는 예전과 그대로, DB_build는 한번만 실행 Sqlite3 에서 “SELECT * FROM TERMS”(DOCS)를 해보자
Tf-idf 계산부분
테스트하기 DB_build는 한번만 실행
Full data를 이용한 정보검색기 평가 평가용 질문셋 (첫번째 줄이 202번 질문) 평가용 정답셋 (질문 | null | 문서이름 | null)
Full data를 이용한 정보검색기 평가 지난 시간에 했던 자료들과 지금 만든 sqlite3를 이용한 tf-idf, AP-88 full data set을 한 곳에 넣는다. 지난 시간에 했던 전처리를 AP88.txt에 하면 되나…. 너무 크고 오래 걸리므로 DB를 연결만 하자 (Build_DB는 이후 쓰지 않는다.) /home/gykim/tfidf_full.db
새로운 DB 연결 Connection 함수에서 /home/gykim/tfidf_full.db에 연 결만 해주면 된다.
평가하기 “질문 번호” “Q질문번호-1” “문서이름” “랭킹” “결과값” “본인이름” 이 들어간 AP88_result.txt파일이 만들어진다.
평가하기 평가 프로그램을 다운받아 result파일, 정답셋과 같은 곳에 둔다. 위와 같이 실행하고 AP88_eval.txt를 열면 성능이 나온다. Retrieved : 검색된 문서 수 Relevant : 정답 문서 수 Rel_ret : 정답이면서 검색된 수 성능지표 precision : 검색된 문서 중 정답의 개수 recall : 정답중 검색된 개수
과제 AP88_eval.txt의 내용을 메일로 보낸다. (파일첨부 아님) 제목 : [학번]AP88_eval 메일주소 : gyk@kangwon.ac.kr 기한 5/6일(일요일) 오후 11시 59분 59초