본문 바로가기

Lucene

[aboutLucene] FilteringTokenFilter

FilteringTokenFilter에 대한 포스트입니다.


4.0부터 처음 나온 필터 클래스는 아닙니다만.. (3.1 부터 나온 것 같습니다.)

제가 원래 Token의 제거를 (불용어 같은 케이스) TokenFilter를 상속받아서 직접 구현해서 쓰고 있었는데

이번에 4.0으로 전환하려고보니 이 filter 클래스가 눈에 띄워서 보게되었습니다.


TokenStream이 가지고있는 Attribute의 구현 클래스중에 PositionIncrementAttribute가 있습니다.


이것은 Token화되어 나온 키워드의 위치 증가를 보여주는 속성인데요..

예를 들어서 "자바 개발자 장용석" 이라는 문장을 공백을 기준으로 키워드 추출한다고 했을 때

기본적인 PositionIncrementAttibute의 값은 


자바 1, 개발자 1, 장용석 1


이 됩니다.


그런데 여기서 길이가 2이하인 키워드는 키워드 추출에서 제거시키는 Filter가 있다고 가정하면

2가지의 경우가 있을 수 있습니다.


개발자 1, 장용석 1

개발자 2, 장용석 1


제거되는 키워드를 위치정보 증가에 포함을 시킬 것인지 아닐 것인지에 따라서 위와 같은 값을 갖는데요..

일반적인 키워드 검색에서는 크게 의미가 없겠지만, 키워드간의 위치정보를 기반으로 검색을 하는 경우에는 

중요한 속성이 됩니다.


아무튼, 이런 형태의 Token Filtering을 구현 할 때 사용하는 필터 클래스입니다.


accept라는 메서드를 Filtering 조건에 맞게 구현해주고, 생성자 파라메터로 위의 위치정보 처리를 어떻게 할 것인지

boolean 값으로 지정해주면 알아서 해줍니다. TokenFilter 클래스를 상속하고 있고요... 예전에는 이걸 increment 메서드에서 다 구현을 해주었었거든요...





luceneKoreanAnalyzer에서도 이 Filter를 사용하도록 수정해야겠네요... 소스가 많이 간단해지네요..


샘플소스 : https://github.com/need4spd/aboutLucene