[ETC] 검색엔진 루씬 Lucene... Analyzer의 선택

황제낙엽 2007.11.27 19:15 조회 수 : 102 추천:94

site_link1  
site_link2  
site_link3 http://1 
펌글

//****
사실 글쓰는 재미가 별로 없습니다.^^ 루씬관심있는 분들이 많이들 이 블로그를 보고는 있는듯 한데, 루씬접목에 대해 얘기되는 것도 별로 없고, 도움이 됐는지, 내가 헛소리 찍찍하는지도 모르겠고 ㅎㅎㅎ.. 써놓은 몇개의 포스트 조차 비공개로 오픈하지 않았습니다.^^
***//

루씬의 사용법에 대해 먼저 언급하지 않고 주변환경을 먼저 언급하는 이유는
이것들의 이해가 루씬의 전체적인 흐름과 응용에 필수적이기 때문입니다.

기본적 사용법에 대한 예제는 도처에 널려있습니다.
대부분 이럽니다.

공개된 소스들을 가지고 한번 돌리고 난 다음에는,
아 잘 돌아가네...
음. 그런데 이제 뭘하지? ...

이전 소개에서 유독 한국어에만 루씬의 혜택이 적다라고 말했습니다.
사실 적다라는 표현은 없다라고 해도 될듯합니다.
별로 유용하지 못하여 쓰지 않는다면 무용지물이겠지요...

그러한 이유는 바로 루씬의 Analyzer에 있습니다.
Analyzer는 단어의 경계를 구분짓는 Tokenizer와 같은 것인데, 한국어의 경우에는 "형태소분석기" 혹은 "색인어추출기" 정도가 되겠지요.
Analyzer는 각 언어마다 고유한 특성을 가지기 때문에 별로도 작성하게 됩니다. 그래서 그 종류도 다양합니다.
일본어나 중국어의 경우에는 루씬용 analyzer가 존재합니다.
그러나, 불행하게도 한국어만 없습니다. (중국어도 별반 없는듯 합니다.^^)

Analyzer는 인덱싱을 위한 키워드 추출 기능을 합니다.
말씀드렸듯이 그 키워드추출이라는 것이 언어마다 방법이 틀리기 때문에 루씬은 Tokenizer라는 인터페이스만을 제공합니다.
그래서 각 Analyzer들은 문자의 종류에 따라서 원하는 입맛에 맞게끔 키워드를 추출하게 되지요.
대체로 키워드를 관리하는 Tokenizer와 그것을 감싸고 있는 Analyzer는 같은 쌍으로 움직입니다.

동일한 문서집합을 가지고 여러가지 검색엔진을 돌렸을때 서로 상이한 검색결과를 가져오는 것도 이러한 입맛이 틀리기 때문이지요. 그래서 이 Analyzer가 검색의 품질을 향상시키는데 아주 중요한 역할을 합니다.

실제로 만병통치약인 최고의 단어 분석기는 없습니다.
일반문서 검색, 해석못할(?) 해괴한 문자가 많은 UCC데이터, 인명/지명 검색, 상품검색 등 검색대상에 따라 키워드를 추출하는 방법을 따로 가는 것이 최고의 방법입니다.
때로는 그 방법을 찾기 위하여 "삽질"이라 불리는 "튜닝"작업도 많이하게 됩니다.

이러한 것들을 해결하기 위하여 루씬에 들어있는 Analyzer는 여러가지가 있습니다.
루씬이 기본적으로 제공하는 것 여러 오픈소스 개발자들이 많은 부분들을 contribute하고 있습니다.
그중 우리가 가장 많이 쓸것 같은 기본적인 것들은 다음과 같습니다.

 

  • WhitespaceAnalyzer
  • SimpleAnalyzer
  • StopAnalyzer
  • StandardAnalyzer
  • CJKAnalyzer
이름만을 가지고도 대략적인 기능들을 유추할 수 있겠지만 실제로 문장이나 단어를 가지고 테스트를 해 보면 각 analyzer의 특징들을 명확히 알 수 있습니다.

다음의 예를 들어 보지요.

삼숭전자의 C.E.O.인 아무개는 e-삼숭(http://www.samsoong.sam)을 총괄하고 있으며 그의 이메일은 email@samsoong.sam이다.

문장을 보면 어떻게 키워드가 추출되어야 할지 바로 나오겠지만, 컴퓨터 알고리즘은 그리 녹녹치 않습니다.
일단 한국어 형태소분석기는 없으니까 제쳐놓고
대체로 단어추출에서 제외해야할 특수문자로 인하여 다음과 같은 어려운점들을 예상할 수 있겠지요. 



일단 위의 각 anlayzer를 가지고 일일이 돌려보겠습니다.


   WhitespaceAnalyzer:
    [삼숭전자의] [C.E.O.인] [아무개는] [e-삼숭(http://www.samsoong.sam)을] [총괄하고] [있으며] [그의] [이메일은] [email@samsoong.sam이다.]

  SimpleAnalyzer:
    [삼숭전자의] [c] [e] [o] [인] [아무개는] [e] [삼숭] [http] [www] [samsoong] [sam] [을] [총괄하고] [있으며] [그의] [이메일은] [email] [samsoong] [sam이다]

  StopAnalyzer:
    [삼숭전자의] [c] [e] [o] [인] [아무개는] [e] [삼숭] [http] [www] [samsoong] [sam] [을] [총괄하고] [있으며] [그의] [이메일은] [email] [samsoong] [sam이다]

  StandardAnalyzer:
    [삼숭전자의] [c.e.o.인] [아무개는] [e] [삼숭] [http] [www.samsoong.sam] [을] [총괄하고] [있으며] [그의] [이메일은] [email@samsoong.sam이다]

  CJKAnalyzer:
    [삼숭] [숭전] [전자] [자의] [c] [e] [o] [인] [아무] [무개] [개는] [e] [삼숭] [http] [samsoong] [sam] [을] [총괄] [괄하] [하고] [있으] [으며] [그의] [이메] [메일] [일은] [email] [samsoong] [sam] [이다]

StandardKoreanAnalyzer
[삼숭전자] [C.E.O.] [아무개] [e-삼숭] [www.samsung.com] [총괄] [메일] [email@samsoong.sam]


우리는 아마도 다음과 같은 색인어에 대한 추출결과를 예측하고자 할 것입니다.(경우에 따라 좀 다를수 있습니다.)
 

[삼숭전자] [C.E.O.] [아무개] [e-삼숭] [www.samsung.com] [총괄] [메일] [email@samsoong.sam]


 
한국어 색인어 추출기가 없는 상황에서 만약 Analyzer를 고른다면 어느것이 가장 합리적일까요?

(하나 더 추가요.
StandardAnalzyer의 장점을 살려, 만약 한국어Analyzer가 위처럼 바람직하게(?) 나온다면 어느것을 선택하겠습니까?)

 



한번 경험담을 늘어놔 보시죠^^..

제 경험과 생각은 다음에...(덧글이 없으면 더이상 진행 안할지도 모릅니다. ㅎㅎㅎ)

 
by typos | 2007/01/22 13:22 | 루씬 인 액션 | 트랙백(2) | 덧글(6)
트랙백 주소 : http://lucene.egloos.com/tb/1486420
내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 글자들과의 지겨운 투쟁 at 2007/01/22 18:43 #

제목 : 루씬용 한국어 분석기, 어떤 방식이 좋을까?
모티브: Analyzer의 선택 저라면 마지막을 선택합니다. [핑클]을 검색했을때, [서핑클럽]이 나오는 문제는 있겠지만 [검색]으로 검색했을때, [검색은 어렵다]라는 문장이 검색되지 않는 것보다 좋을 듯해서요. 물론, 좋은 형태소분석기를 붙여서 쓸 수 있다면 좋겠습니다만... 쉬운 문제는 아니겠죠. ...more


Tracked from 한글이 꿈틀 at 2007/01/24 16:44 #

제목 : KoreanAnalyzer, 구현 못할 것도 없겠다!
Analyzer의 선택 아, 올것이 왔다. 루씬은 분석기(Analyzer)만 구현하면 되는구나. 대충 가능한 단어 목록만 나오면 되는구나. 그렇다면 역시 "문법형태소 네트워크를 이용한 한글 문헌의 자동 키워드 추출"이라는 논문 (RISS4U에서 찾아보시길. 현재는 예전의 링크가 끊어져서 다시 걸기 귀찮음.) 의 방식에 별도의 불용어 사전을 추가한다면 못할 것도 없겠다. 으으읏, 신난다! :-) ...more


Commented by 테이_ble at 2007/01/23 00:04 #
CJKAnalyzer 너무하네요 ㅠㅠ

Commented by 미친병아리 at 2007/01/23 01:56 #
회사 제품에 검색엔진 도입을 고민중인데 한글형태소 분석기가 가장 골치거리였습니다.. 하지만, 님의 글을 읽으니 완벽한 형태소 분석기가 항상 필요한 것은 아니라는 생각도 듭니다..
처음엔 CJKAnalyzer가 가장 무식한 전혀 쓸데없는 것 처럼 보였는데, 어느 정도의 색인 및 랭킹 등의 후처리를 거치면 그런대로 쓸만할 것 같기도 합니다..
검색엔진엔 이제 발 디디는 문외한이라, 님의 의견이 궁금하네요..

Commented by 최종욱 at 2007/01/24 16:30 # x
이히히 관심있습니다 :-) 좋은 형태소 분석기를 쑤셔넣을 곳이 되는군요.

Commented by 최종욱 at 2007/01/24 16:41 # x
"문법형태소 네트워크를 이용한 한글 문헌의 자동 키워드 추출"이라는 논문의 방식에 별도의 불용어 사전을 추가한다면 못할 것도 없겠군요. :-) 우힛

Commented by pencil at 2007/01/25 00:50 # x
학교 과제로 CJKAnalyzer의 방식과 유사하게 구현해 본 적이 있습니다. 두 세 글자의 단어로만 이루어진 단어 사전에 매칭하여 키워드를 추출해서 검색에 사용하였습니다.
세심하게 고안한 형태소 분석기가 없다면 띄어쓰기로 구분된 어절에 대해 일일히 맞춰보는게 어느 정도 효율적일 것이라는 판단을 했었고, 일단 과제를 하는데는 무리 없는 성능이 나왔습니다.
.. 그래도 쓸만한 형태소 분석기가 있는 편이 낫지 않을까 하는 생각이 듭니다.

Commented by 최종욱 at 2007/01/25 08:12 # x
사정상 메일을 못 보내서 코멘트로 남깁니다.

곧 있으면 2월 2일~4일이나 3일~5일 으로 외박나옵니다. 구정 때도 휴가 나오구요. 제대는 4월 13일입니다.