[java] 아파치 루신(Apache Lucene)을 이용한 토큰화 및 분석 처리 방법

아파치 루신은 자바로 작성된 검색 라이브러리로, 텍스트 검색 및 정보 추출에 널리 사용됩니다. 이번 포스트에서는 아파치 루신을 사용해 텍스트를 토큰화하고 분석하는 방법에 대해 알아보겠습니다.

토큰화(Tokenization)

토큰화란 문장을 작은 단위인 토큰으로 분리하는 과정을 의미합니다. 예를 들어, “Hello, world!”라는 문장을 토큰화하면 [“Hello”, “,”, “world”, “!”]와 같이 토큰들로 분리됩니다.

아파치 루신은 텍스트를 토큰화하기 위해 StandardAnalyzer를 제공합니다. 이를 사용하여 다음과 같이 텍스트를 토큰화할 수 있습니다:

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;

// 텍스트
String text = "Hello, world!";

// StandardAnalyzer를 사용하여 토큰화 수행
StandardAnalyzer analyzer = new StandardAnalyzer();
TokenStream tokenStream = analyzer.tokenStream(null, new StringReader(text));

// 토큰 출력
CharTermAttribute termAttribute = tokenStream.addAttribute(CharTermAttribute.class);
tokenStream.reset();
while (tokenStream.incrementToken()) {
    System.out.println(termAttribute.toString());
}
analyzer.close();

위의 코드에서 StandardAnalyzer를 사용하여 TokenStream을 생성하고, tokenStream 객체의 incrementToken() 메소드를 통해 토큰을 하나씩 얻어옵니다. 각 토큰은 CharTermAttribute 객체에서 가져올 수 있습니다.

분석(Analysis)

분석은 토큰화된 단어들에 대해 추가적인 처리를 수행하는 과정입니다. 예를 들어, 텍스트에서 불용어(stopwords)를 제거하거나 어간 추출(stemming)을 수행할 수 있습니다.

아파치 루신은 다양한 분석기를 제공합니다. 예를 들어, EnglishAnalyzer는 영어 불용어를 제거하고, SnowballFilter를 사용하여 어간 추출을 수행합니다.

import org.apache.lucene.analysis.core.StopAnalyzer;
import org.apache.lucene.analysis.en.EnglishAnalyzer;
import org.apache.lucene.analysis.snowball.SnowballFilter;

// 텍스트
String text = "I am running in the park.";

// EnglishAnalyzer를 사용하여 토큰화 및 분석 수행
EnglishAnalyzer analyzer = new EnglishAnalyzer();
TokenStream tokenStream = analyzer.tokenStream(null, new StringReader(text));

// 불용어 필터링 및 어간 추출 수행
tokenStream = new StopFilter(tokenStream, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
tokenStream = new SnowballFilter(tokenStream, "English");

// 토큰 출력
CharTermAttribute termAttribute = tokenStream.addAttribute(CharTermAttribute.class);
tokenStream.reset();
while (tokenStream.incrementToken()) {
    System.out.println(termAttribute.toString());
}
analyzer.close();

위의 코드에서는 EnglishAnalyzer를 사용하여 영어 텍스트를 토큰화하고 분석합니다. 이후에 StopFilter를 사용하여 불용어를 제거하고, SnowballFilter를 사용하여 어간 추출을 수행합니다.

아파치 루신은 다양한 분석기와 필터를 제공하므로, 특정 언어나 도메인에 맞게 분석 처리를 조정할 수 있습니다.

이렇게 아파치 루신을 사용하여 텍스트를 토큰화하고 분석하는 방법에 대해 알아보았습니다. 루신의 다양한 기능을 활용하여 색인 작업이나 검색 연산 등에 활용할 수 있습니다.

참고 자료