본문 바로가기

attribute

Lucene 3.0 TokenStream과 AttributeSource. - 2 - 앞에서 AttributeSource에 Attribute들 (term, offset, position, type 등) set 해주면 그 뒤에 오는 Filter나 Tokenizer가 해당 Attribute를 사용 할 수 있다고 했습니다. 각각의 Filter와 Tokenizer는 모두 TokenStream을 상속하고 있고 이 TokenStream은 AttributeSource를 상속받고 있습니다. 이 Filter와 Tokenizer가 서로 데코레이터 패턴으로 물려있기 때문에 앞에서 set한 결과를 뒤에 따라오는 Filter와 Tokenizer가 사용 할 수 있는 것 입니다. (Java의 stream 관련 클래스들을 생각하시면 됩니다.) 소스를 보면 보통 맨 앞단에서 들어오는 String을 잘라내는 역할을 하는.. 더보기
Lucene 3.0 TokenStream과 AttributeSource. - 1 - 루씬이 버전업 되면서 바뀐 부분 중 하나가 이 부분인 것 같습니다. 이전에는 Tokenizer나 TokenFilter 클래스를 만들 때 TokenStream 클래스를 상속받아 만들고 이 TokenStream의 next 메서드를 사용해서 얻어지는 Token을 가지고 데코레이터 패턴으로 적용 된 Filter들이 Token을 처리하는 방식이었습니다. 예를 들어서, Analyzer의 tokenStream 메서드가 위와 같이 정의되어 있다고 하고 분석해야 할 문장이 "검색엔진 개발자" 라고 했을 때 추출 되는 Token을 얻어내기 위해서 next 메서드를 실행했었습니다. 즉, 대략 위와 같은 방식이었죠. next 메서드가 실행 되면 제일 상위의 Tokenizer에서 "검색엔진,(0,4)" 라는 Token을 만들어.. 더보기
Lucene 3.0 TokenStream. 그리고 Attribute. 예전에 만들었던 한글 명사 추출 Analyzer를 공개하려고 하다가 그 Analyzer의 core 버전이 2.4.0 base여서 이것을 최신 루씬 버전인 3.0으로 컨버팅 하려고 했는데... 바뀐게 한두가지가 아니라서.. 일단 바뀐 부분부터 공부를 해야겠다 싶었다. -_-; 제일 당황스러운 부분이... TokenStream.next(Token token) 메서드가 사라진 것이었다. -_-; 이 부분이 TokenStream.incrementToken() 메서드를 대체가 되었는데 이건 조만간 다시 포스팅 하기로 하고.. 일단, 기존에 사용되던 Token이란 클래스가 남아있기는 한데.. 대부분 Attribute 클래스에 기초한 놈들로 변경이 된 것 같다. 예전에 하나의 String에서 Analyzer로 분석 .. 더보기