PyLucene을 사용하여 텍스트 검색 애플리케이션 만들기

데이터의 폭발적인 증가로 인해 텍스트 검색은 현대의 많은 애플리케이션에서 중요한 요소로 자리잡았습니다. PyLucene은 파이썬에서 자바의 Lucene 라이브러리를 사용할 수 있도록 만든 패키지입니다. 이를 사용하여 텍스트 검색 애플리케이션을 구축하는 방법을 살펴보겠습니다.

PyLucene 설치

PyLucene을 사용하기 위해 먼저 설치해야 합니다. PyLucene은 Java 진영의 Lucene 라이브러리에 의존하기 때문에, 먼저 Java 환경을 설정해야 합니다. Java를 설치한 후, 아래 명령을 사용하여 PyLucene을 설치할 수 있습니다.

pip install pylucene

텍스트 검색 애플리케이션 구축하기

PyLucene을 사용하여 텍스트 검색 애플리케이션을 구축하는 과정을 살펴보겠습니다.

1. 색인 생성하기

먼저, 텍스트 검색을 위해 검색 대상이 될 데이터를 색인화해야 합니다. 이를 위해 필요한 단계는 다음과 같습니다.

import sys
from java.nio.file import Paths
from org.apache.lucene.analysis.core import WhitespaceAnalyzer
from org.apache.lucene.document import Document, Field, TextField
from org.apache.lucene.index import DirectoryReader, IndexWriter, IndexWriterConfig
from org.apache.lucene.queryparser.classic import QueryParser
from org.apache.lucene.search import IndexSearcher
from org.apache.lucene.store import FSDirectory

def create_index(data_dir, index_dir):
    analyzer = WhitespaceAnalyzer()
    config = IndexWriterConfig(analyzer)
    directory = FSDirectory.open(Paths.get(index_dir))
    writer = IndexWriter(directory, config)

    for file in os.listdir(data_dir):
        path = os.path.join(data_dir, file)
        with open(path, 'r') as f:
            content = f.read()
        doc = Document()
        doc.add(Field("content", content, TextField.TYPE_STORED))
        doc.add(Field("path", path, TextField.TYPE_STORED))
        writer.addDocument(doc)
    
    writer.commit()
    writer.close()

위 코드는 지정된 디렉토리에 있는 파일들을 읽어서 Lucene 색인을 생성합니다. 각 파일의 내용은 “content” 필드에 저장되고, 파일 경로는 “path” 필드에 저장됩니다.

2. 검색하기

색인이 생성되면, 검색을 수행할 수 있게 됩니다. 아래 코드는 키워드를 입력받아 해당 키워드로 검색을 수행하고 결과를 출력하는 함수를 정의한 예시입니다.

def search(keyword, index_dir):
    directory = FSDirectory.open(Paths.get(index_dir))
    searcher = IndexSearcher(DirectoryReader.open(directory))
    analyzer = WhitespaceAnalyzer()
    parser = QueryParser("content", analyzer)
    query = parser.parse(keyword)
    hits = searcher.search(query, 10)

    for hit in hits.scoreDocs:
        doc = searcher.doc(hit.doc)
        print(f"Score: {hit.score}, Path: {doc.get('path')}")

    searcher.getIndexReader().close()
    directory.close()

위 코드는 인덱스 디렉토리와 검색어를 받아 해당 검색어로 검색을 수행하고, 검색 결과를 출력합니다.

3. 사용 예제

위에서 정의한 함수를 사용하여 텍스트 검색 애플리케이션을 만들어보겠습니다.

data_dir = "/path/to/data_directory"
index_dir = "/path/to/index_directory"

# 데이터 색인 생성
create_index(data_dir, index_dir)

# 검색 수행
keyword = input("검색어를 입력하세요: ")
search(keyword, index_dir)

사용자는 검색어를 입력하고, 해당 검색어로 데이터를 검색할 수 있습니다.

결론

PyLucene을 사용하면 간단하게 텍스트 검색 애플리케이션을 만들 수 있습니다. 이를 활용하여 데이터를 쉽게 검색하고 관리할 수 있습니다. 물론, 좀 더 복잡한 검색 기능을 추가하는 등의 확장도 가능합니다. PyLucene의 강력한 검색 기능을 활용하여 효율적인 텍스트 검색 애플리케이션을 구축해보세요.


참고: PyLucene 공식 문서