[java] 아파치 루신(Apache Lucene)을 이용한 텍스트 분석 및 분류 구현 방법

아파치 루신은 자바 기반의 고성능 오픈소스 검색 엔진 라이브러리로, 텍스트 검색, 색인화, 텍스트 분석 등의 기능을 제공합니다. 이번 글에서는 아파치 루신을 사용하여 텍스트 분석 및 분류를 수행하는 방법을 알아보겠습니다.

라이브러리 설치

아파치 루신을 사용하기 위해서는 먼저 라이브러리를 설치해야 합니다. 아래와 같이 Maven을 사용해 의존성을 추가할 수 있습니다.

<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-core</artifactId>
    <version>8.8.1</version>
</dependency>

Maven을 사용하지 않는 경우, 아파치 루신의 공식 웹사이트(https://lucene.apache.org/)에서 라이브러리를 직접 다운로드할 수 있습니다.

텍스트 인덱싱

아파치 루신을 사용하여 텍스트를 인덱싱하기 위해서는 몇 가지 단계를 거쳐야 합니다.

  1. 텍스트를 색인화할 Document 객체 생성
  2. 필요한 필드 추가 (예: 제목, 내용, 작성일 등)
  3. Document 객체를 인덱서(Indexer)에 추가
  4. 인덱서를 닫고 변경 사항을 커밋

아래는 간단한 예제를 보여주는 코드입니다.

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TextIndexer {
    public static void main(String[] args) throws Exception {
        // 색인 데이터를 저장할 디렉토리 설정
        Directory directory = FSDirectory.open(Paths.get("index"));

        // 색인화를 위한 분석기 설정
        Analyzer analyzer = new StandardAnalyzer();

        // 인덱서 생성
        IndexWriterConfig config = new IndexWriterConfig(analyzer);
        IndexWriter indexWriter = new IndexWriter(directory, config);

        // 색인할 Document 객체 생성
        Document document = new Document();

        // 필드 추가 (예: 제목, 내용, 작성일)
        Field titleField = new TextField("title", "Apache Lucene Tutorial", Field.Store.YES);
        Field contentField = new TextField("content", "This is a tutorial on Apache Lucene", Field.Store.YES);
        Field dateField = new StringField("date", "2021-01-01", Field.Store.YES);

        document.add(titleField);
        document.add(contentField);
        document.add(dateField);

        // 인덱서에 Document 객체 추가
        indexWriter.addDocument(document);

        // 인덱서 닫고 변경 사항 커밋
        indexWriter.close();
    }
}

위의 코드는 “Apache Lucene Tutorial”이라는 제목과 “This is a tutorial on Apache Lucene”라는 내용을 갖는 Document를 생성하여 인덱싱하는 예제입니다. 추가할 필드는 필요에 따라 변경할 수 있습니다.

텍스트 검색

아파치 루신을 사용하여 텍스트를 검색하려면 검색기(Searcher)를 생성하고, 검색어를 기반으로 쿼리(Query)를 작성해야 합니다. 검색 결과는 TopDocs 객체로 반환됩니다.

아래는 간단한 검색 예제 코드입니다.

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TextSearcher {
    public static void main(String[] args) throws Exception {
        // 검색할 인덱스 디렉토리 설정
        Directory directory = FSDirectory.open(Paths.get("index"));

        // 검색을 위한 인덱스 리더 생성
        IndexReader indexReader = DirectoryReader.open(directory);

        // 검색을 위한 검색기 생성
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);

        // 검색어와 검색 대상 필드 설정
        String keyword = "Lucene";
        String field = "content";

        // 쿼리 파서 설정
        Analyzer analyzer = new StandardAnalyzer();
        QueryParser queryParser = new QueryParser(field, analyzer);

        // 검색어 기반으로 쿼리 생성
        Query query = queryParser.parse(keyword);

        // 검색 수행
        TopDocs topDocs = indexSearcher.search(query, 10);

        // 검색 결과 출력
        for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
            Document document = indexSearcher.doc(scoreDoc.doc);
            System.out.println("Score: " + scoreDoc.score);
            System.out.println("Title: " + document.get("title"));
            System.out.println("Content: " + document.get("content"));
        }

        // 인덱스 리더 닫기
        indexReader.close();
    }
}

위 코드는 “content” 필드에서 “Lucene”라는 검색어를 포함하는 문서를 검색하는 예제입니다. 필요에 따라 검색어와 대상 필드를 변경할 수 있습니다.

결론

이번 포스트에서는 아파치 루신을 사용하여 텍스트 분석 및 분류를 수행하는 방법을 알아보았습니다. 아파치 루신은 강력한 텍스트 검색 및 분석 기능을 제공하며, 개발자들은 이를 활용하여 다양한 애플리케이션을 개발할 수 있습니다. 자세한 내용은 아파치 루신의 공식 문서를 참조하시기 바랍니다.

참고 자료