SSISO Community

시소당

[강좌] 루씬(LUCENE)이란?

[강좌] 루씬(LUCENE)이란?

 Lucene 는 Jakarta 프로젝트에 의해서 개발된, 100% PureJava의 인덱스를 작성하는 타입의 풀텍스트 검색 엔진이다(인덱스란, 고속으로 검색하기 위해서 만든 색인을 말한다.). 1997년쯤 Doug Cutting가 개발하여 2000에 SourceForge.net에 공개 되었다. 2001년에는 Apache Software Foundation에 이관된후 2005년부터 Apache의 톱 레벨 프로젝트로 승격되었다. Lucene이라는 이름은 Cutting의 아내의 미들네임이며, 그녀의 외가, 조모의 퍼스트네임이다. 왜 아내의 이름을 붙였는지에 대해서는 확실치 않으나 Cutting의 아내가 물건을 찾는데 능숙했기때문이라는 유래만 있을 뿐이다.

 Lucene은 라이브러리(API)이며 완결한 프로그램이 아니다. 즉 Lucene만 설치한다고 프로그램을서의 기능을 할 수 없다는 뜻이다. Lucene에서 제공하는 API를 이용하여, 간단하게 사용하기 쉬운 풀텍스트 검색 프로그램을 만들 수 있다. 또 Java로 개발 되어 있기 때문에, Web 어플리케이션으로도 손 쉽게 적용 할 수 있다. Lucene에서는 여러 분석 라이브러리를 제공하지만 한국어, 일본어, 중국어와 같은 아시아권의 언어를 정확히 해석하지는 못한다. 이는 언어 자체가 상당히 많은 변화를 하기 때문이다. 때문에 한국어 인덱싱이라던지 일본어 인덱싱에는 형태소 분석을 통한 색인 라이브러리를 만들어 사용 한다면 좀더 정확한 인덱싱을 할 수 있다. 형태소 분석이란 문자열을 품사마다 분해하는 기술이다. 형태소 분석을 통한 색인을 만드는것과 형태소 분석을 하지 않고 색일을 만드는것은 아래 예시와 같은 차이가 나타난다.

“오늘은 좋은 날씨입니다”

 위 예문을 Lucene에서 기본 제공하는 WhiteSpace(뛰어쓰기에 의한 분석)분석기를 이용하여 색인을 만든다면

[오늘은] [좋은] [날씨입니다]

v이와 같이 3개의 인덱스가 생성될것이다. 이는 “오늘”이란 단어로 사용자가 검색을 시도했을경우 [오늘은]이란 색인과 매치하게 되지만 정확도는 떨어진다. 많은 검색엔진들이 사용자가 입력한 단어에 가장 정확한 단어가 있는 데이터를 보여주려고 노력하는데 수 많은 문서가 웹상에 있다고 생각한다면 위의 문장이 있는 문서는 찾기 힘들어 질 것이다. 반대로 형태소 분석을 통한 색인을 만든다면

[오늘] [은] [좋다] [날씨] [입니다]

 위와 같이 색인이 만들어 진다. 이는 위의 WhiteSpace분석기를 통해 만든 색인보다 좀더 한국어의 실정에 맞도록 색인이 만들어지며 검색을 요청한 사용자에게 좀더 정확한 검색 결과를 돌려 줄 수 있게 된다. 이는 문자열을 형태소로 분석하여 단어마다 색인을 붙인다면 어느 단어가 어느 문장에 몇 개 포함되는지, 어느 장소가 포함되는지에 대한 정보도 인덱스 할 수 있다는것을 의미한다. 또한 검색에 필요없는 “입니다”와 같은 조동사등을 제외하여 인덱스의 사이즈를 작게 유지 하는데도 도움을 줄 것이다. 문제점으로는 기본으로 제공되는 Lucene API로는 위와 같은 형태소 분석을 할 수 없다는 점이다. 그나마 아시아권에 가장 적합한 분석기로 CJK(Chinese Japanese Korean) Analyzer가 제공되고 있지만 이 역시 정확한 한국어 분석에는 그다지 도움이 되지는 않는다. CJKAnalyzer는 중국어, 한국어, 일본어 분석을 위해 추가로 개발된 분석기로 문자열을 2문자씩 분해해서 인덱스에 등록한다. 예를 들면 위의 “오늘은 좋은 날씨입니다”를 CJKAnalyzer를 통해 분해 한다면

[오늘] [늘은] [은좋] [좋은] [은날] [날씨] [씨입] [입니] [니다]

 이와 같이 분해하여 인덱싱을 한다. 분명 WhiteSpace Analyzer보다는 한국 유저에게 정확한 검색 결과를 제시해주겠지만 인덱스의 크기도 커질뿐더러 쓸데 없는 인덱스때문에 분명 검색에 방해가 될 것이다.

앞으로 이런 Lucene의 성격을 이해하고 Lucene으로 색인 및 검색 프로그램을 개발하며 아시아권에 알맞는 색인에 대해서 연구해보겠다.



출처 : http://devko.blueiblog.com/archives/22

1408 view

4.0 stars