- 정보검색 방법 개요

 

Term Frequency : tf

단어 빈도수는 말 그대로 "단어가 그 문서에서 나타난 횟수"를 나타낸다

 

단어 빈도수는 그 문서에서 나타난 횟수를 나타냄으로써, 그 문서에서 그 단어가 얼마나 중요한지를 표현 할수 있다. 

 

Document Frequency : df 

문서 빈도수는 "해당 단어가 나타난 문서의 수" 이다. 따라서 각 단어가 그 문서에서 얼마나 나타났는지는 중요하지 않고, 몇개의 문서에서 나타났는지가 중요하다. 이 정보는, 만약 df 값이 높은 단어는 많은 문서에서 나타나는 것이므로, 검색에서 별로 중요한 단어가 아니라는 것을 나타낸다. (검색에 중요한 단어는 내가 찾을 문서에선 많이 나타나고, 다른 문서에선 적게 나타날 수록 중요하다.)

 

 

Inverse Document Frequency : idf

역문서 빈도수는 df를 역수 취한 것이다. df는 값이 클 수록 중요하지 않은 단어를 나타내는 것인데, 이것을 반대로 값이 클수록 중요한 단어로 나타내기 위하여 역수를 취한다고 보면 된다. 또한, df의 값의 범위는 굉장이 넓게 구성되는데, 이것의 차를 줄이기 위하여 로그(log) 값을 취해 준다

 

 

tf-idf Weight

tf-idf단어의 중요도를 수치로 표현 한 것으로써, tf 값과 idf값의 곱으로 이루어 진다

보통 로그를 붙이는데 붙이고 안붙이고는 해당 도메인의 특성에 따라 맞춰가 것이 좋겠다.

 

 

 

Cosine Similarity : cos(q,d) 

각도를 고려한 유사도 계산법을 알아보자

벡터 스페이스 모델에서 가장 많이 사용되는 문서와 질의어 간의 유사도 계산법이 바로, 코사인 유사도 방법이다

 

객체 설계도 구현 상세 내용

IndexWordDB : 일단 IndexWordDB에 대해서 설명 하자면 모든 문서에서 글자를 두 글자씩 따서 예를 들면 안녕하세요가 있으면 안녕, 녕하, 하세, 세요 이렇게 스트링을 따와서 KEY 값에 넣고 Data의 값으로는 다 0으로 넣어 뒀다. 이로서 모든 문서의 두글자를 다 저장해놨다.

 

WordDfDB : DB 색인어의 Df 단어가 전체 문서중 개의 문서에 나오나를 저장해놨다. 이때 IndexWordDB 사용하였다.

 

docDB[1] ~ docDB[30]  : 이것이 프로젝트의 핵심 DB 30개의 문서에 하나하나씩 DB 주었으면 DB에는 그문서의 id,title,size 저장 하였으며 제일 중요한 tf-idf 저장하였다. 특히 tf-idf 저장할때는 맨처음에는 tf 저장해놓았가 WordDfDB 저장되어 있는 Df 이용해 tf-idf 가중치로 그값을 변환하였다.

 

Cos 클래스 : 클래스에다가는 docNum(문서번호), similarity(코사인유사도) 저장하였다. 특히 Comparable<Cos>인터페이스를 구현하여 sort함수를 similarity 순으로 정렬 하였다.

 

 

 

- 실행 결과

색인기

 

검색기-콘솔
검색기-gui

 

 

 

깃허브

https://github.com/icd0422/Information-Retrieval-Engine

 

icd0422/Search-Engine

Contribute to icd0422/Search-Engine development by creating an account on GitHub.

github.com

 

+ Recent posts