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
다음의 예를 들어 보지요.
문장을 보면 어떻게 키워드가 추출되어야 할지 바로 나오겠지만, 컴퓨터 알고리즘은 그리 녹녹치 않습니다.
일단 한국어 형태소분석기는 없으니까 제쳐놓고
대체로 단어추출에서 제외해야할 특수문자로 인하여 다음과 같은 어려운점들을 예상할 수 있겠지요.
- C.E.O.
- e-삼숭
- http://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] [이다]
[삼숭전자] [C.E.O.] [아무개] [e-삼숭] [www.samsung.com] [총괄] [메일] [email@samsoong.sam]
우리는 아마도 다음과 같은 색인어에 대한 추출결과를 예측하고자 할 것입니다.(경우에 따라 좀 다를수 있습니다.)
[삼숭전자] [C.E.O.] [아무개] [e-삼숭] [www.samsung.com] [총괄] [메일] [email@samsoong.sam]
한국어 색인어 추출기가 없는 상황에서 만약 Analyzer를 고른다면 어느것이 가장 합리적일까요?
(하나 더 추가요.
StandardAnalzyer의 장점을 살려, 만약 한국어Analyzer가 위처럼 바람직하게(?) 나온다면 어느것을 선택하겠습니까?)
한번 경험담을 늘어놔 보시죠^^..
제 경험과 생각은 다음에...(덧글이 없으면 더이상 진행 안할지도 모릅니다. ㅎㅎㅎ)
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
18 | (Bing) Mustache 의 특징 | 황제낙엽 | 2023.12.21 | 82 |
17 | JSTL과 Velocity를 활용한 UI 레이어 구현 방법 | 황제낙엽 | 2007.01.30 | 402 |
16 | 벨로시티에서 loop 작성 | 황제낙엽 | 2005.12.13 | 158 |
15 | Tiles2 간단한 예제 맛보기 | 황제낙엽 | 2009.10.20 | 111 |
14 | Spirng MVC 와 Tiles 2 연동하기(응용) | 황제낙엽 | 2009.10.13 | 106 |
13 | Spirng MVC 와 Tiles 2 연동하기(기본) | 황제낙엽 | 2009.10.13 | 95 |
» | 검색엔진 루씬 Lucene... Analyzer의 선택 | 황제낙엽 | 2007.11.27 | 181 |
11 | Sitemesh와 JSP 파일 이름 | 황제낙엽 | 2007.08.16 | 107 |
10 | SiteMesh를 이용하여 웹 페이지의 레이아웃을 처리 | 황제낙엽 | 2007.08.13 | 127 |
9 | Cactus를이용한효율적인테스트전략 | 황제낙엽 | 2007.01.30 | 103 |
8 | Xdoclet 사용하기 2부 | 황제낙엽 | 2006.10.04 | 102 |
7 | Xdoclet 사용하기 1부 | 황제낙엽 | 2006.10.04 | 118 |
6 | Jakarta Lucene (루씬) - 들어가기 | 황제낙엽 | 2007.07.30 | 120 |
5 | [Hibernate] Hibernate Tutorial | 황제낙엽 | 2012.11.15 | 247 |
4 |
[Hibernate] 하이버네이트 참조문서 버전 3.2 cr3의 최신 업데이트 한글 번역본
![]() | 황제낙엽 | 2007.07.03 | 172 |
3 | [Hibernate] 페이징 처리 정리 | 황제낙엽 | 2007.02.26 | 515 |
2 | [Hibernate] Hibernate 프레임워크를 이용한 효율적인 개발 전략 | 황제낙엽 | 2007.01.30 | 452 |
1 |
[Hibernate] Hibernate 와 Ant 에서 composite id 사용하기 예제
![]() | 황제낙엽 | 2005.11.29 | 219 |