아파치 루신은 자바 기반의 고성능 오픈소스 검색 엔진 라이브러리로, 텍스트 검색, 색인화, 텍스트 분석 등의 기능을 제공합니다. 이번 글에서는 아파치 루신을 사용하여 텍스트 분석 및 분류를 수행하는 방법을 알아보겠습니다.
라이브러리 설치
아파치 루신을 사용하기 위해서는 먼저 라이브러리를 설치해야 합니다. 아래와 같이 Maven을 사용해 의존성을 추가할 수 있습니다.
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>8.8.1</version>
</dependency>
Maven을 사용하지 않는 경우, 아파치 루신의 공식 웹사이트(https://lucene.apache.org/)에서 라이브러리를 직접 다운로드할 수 있습니다.
텍스트 인덱싱
아파치 루신을 사용하여 텍스트를 인덱싱하기 위해서는 몇 가지 단계를 거쳐야 합니다.
- 텍스트를 색인화할 Document 객체 생성
- 필요한 필드 추가 (예: 제목, 내용, 작성일 등)
- Document 객체를 인덱서(Indexer)에 추가
- 인덱서를 닫고 변경 사항을 커밋
아래는 간단한 예제를 보여주는 코드입니다.
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”라는 검색어를 포함하는 문서를 검색하는 예제입니다. 필요에 따라 검색어와 대상 필드를 변경할 수 있습니다.
결론
이번 포스트에서는 아파치 루신을 사용하여 텍스트 분석 및 분류를 수행하는 방법을 알아보았습니다. 아파치 루신은 강력한 텍스트 검색 및 분석 기능을 제공하며, 개발자들은 이를 활용하여 다양한 애플리케이션을 개발할 수 있습니다. 자세한 내용은 아파치 루신의 공식 문서를 참조하시기 바랍니다.