간단한 검색엔진은 개발자라면 누구나 쉽게 만들 수 있다.
물론 루씬(Lucene)이나 엘라스틱서치(Elastic Search), 솔라(Solar)같은 훌륭한 검색엔진들이 이미 즐비하니 굳이 만들 필요는 없다. 이 포스팅은 역색인 원리를 설명하기 위함이다.
검색은 당연히 키워드(Keyword)를 넣는다.
검색창이 있고 아무 키워드나 넣으면 가장 유사한 문서를 찾아주는 것이 검색엔진이다.
여기서 간단한 검색엔진이라 함은 바로 이 "키워드"를 입력 했을 때 "문서"를 찾아주면 된다는 것이다.
원본 데이터
key : 1 |
위와 같이 원본 데이터 3개가 있을 경우
첫번째 데이터를 형태소 분석을 수행하면 다음과 같다.
[ ["융베리", NNP] , [ " , ", SP ] , [ "아스널", NNG ] , [ "남", VV ], [ "는다", EC], [ "...", SE], [ "아르테타", NNP ], [ " \" ", SS], [ "함께", MAG ], [ "하", XSV ], [ "는", ETM ], [ "것", NNB ], [ "이", JKS ], [ "최선", NNG ], [ "의", JKG ], [ "결정", NNG ], [ " \" ", SS] ]
이 외에도 추가적인 정보가 있지만 설명을 위해 불필요한 정보는 제거하였다.
일반적으로 검색엔진은 불필요한 품사를 제외한 명사 등을 추출하여 사용하기 때문에 문장에서 명사만 추출하면 다음과 같다.
융베리, 아스널 남는다…아르테타 "함께하는 것이 최선의 결정" => 융베리 아스널 아르테타 최선 결정
LG화학 "전기차 배터리 독립법인 결정된 바 없다" => lg 화학 전기차 배터리 독립 법인 결정
현대차, 전용 플랫폼 장착한 전기차 SK 배터리 낙점...LG, CATL 2차물량 부터 => 현대차 전용 플랫폼 장착 전기차 sk 배터리 낙점 lg catl 물량 |
형태소 분석이 끝나면 검색엔진은 역색인 작업을 하게 된다. 결과는 다음과 같다.
키워드 |
문서번호 |
융베리 |
1 |
아스널 |
1 |
아르테타 |
1 |
최선 |
1 |
결정 |
1,2 |
lg |
2,3 |
화학 |
2 |
전기차 |
2,3 |
배터리 |
2,3 |
독립 |
2 |
법인 |
2 |
현대차 |
3 |
전용 |
3 |
플랫폼 |
3 |
장착 |
3 |
낙점 |
3 |
catl |
3 |
sk |
3 |
역색인의 장점은 매우 빨리 결과를 찾을 수 있다.
키워드가 여러개 있어도 속도에 큰 영향을 주지 않게 된다.
검색 키워드가 "전기차 결정"라고 입력하면
전기차에 속한 문서번호 2,3을 가져오고,
결정에 속한 문서번호 1,2을 가져온다.
교집합인 2,3을 출력해주면 간단한 작업만 필요하다.
OR처리가 필요하면
1번 문서 1번
2번 문서 2번
3번 문서 1번
문서별 등장 빈도수를 책정한 후, 빈도가 많은 순으로 2,1,3순서를 하면된다.
https://needjarvis.tistory.com/345
'정보검색' 카테고리의 다른 글
Mean Average Precision(MAP), Precision at K, Recall at K (0) | 2019.12.24 |
---|---|
대용량 검색 처리를 위한 역색인 (0) | 2019.12.24 |
검색은 어떻게 작동하는가: How Search Works (0) | 2019.12.23 |
형태소 분석이 필요한 이유 (0) | 2019.12.03 |
BM25 (0) | 2019.12.03 |