파이썬과 PyLucene을 함께 사용해보기

이번 포스트에서는 파이썬과 PyLucene을 함께 사용하는 방법에 대해 알아보겠습니다. PyLucene은 Apache Lucene을 파이썬에서 사용할 수 있게 해주는 라이브러리입니다. Lucene은 자바로 작성된 검색 엔진 라이브러리로, 텍스트 검색 기능을 강력하게 제공합니다.

1. PyLucene 설치하기

먼저, PyLucene을 설치해야 합니다. PyLucene은 자바와 파이썬을 함께 사용하기 때문에 몇 가지 사전 준비 작업이 필요합니다.

  1. Java 설치: PyLucene은 Java 환경에서 동작하기 때문에 우선 Java를 설치해야 합니다. Java Development Kit(JDK)를 다운로드하여 설치합니다.

  2. JPype 설치: PyLucene은 JPype라는 라이브러리를 사용하여 Java와 Python 언어 간의 상호작용을 가능하게 합니다. JPype을 설치하기 위해 다음 명령을 실행합니다.

pip install JPype1
  1. PyLucene 설치: 이제 PyLucene을 설치할 차례입니다. 다음 명령을 실행하여 PyLucene을 설치합니다.
pip install PyLucene

2. PyLucene을 사용한 텍스트 검색 예제

이제 PyLucene을 사용하여 간단한 텍스트 검색 예제를 작성해보겠습니다. 다음은 특정 키워드를 포함하는 문서를 검색하는 예제 코드입니다.

import lucene

from org.apache.lucene.analysis.standard import StandardAnalyzer
from org.apache.lucene.document import Document, Field, FieldType
from org.apache.lucene.index import IndexWriter, IndexWriterConfig
from org.apache.lucene.queryparser.classic import QueryParser
from org.apache.lucene.search import IndexSearcher, ScoreDoc
from org.apache.lucene.store import RAMDirectory
from org.apache.lucene.util import Version

def create_document(text):
    doc = Document()
    content_field = FieldType()
    content_field.setStored(True)
    content_field.setTokenized(True)
    doc.add(Field("content", text, content_field))
    return doc

def search_index(search_term, index_dir):
    analyzer = StandardAnalyzer()
    query_parser = QueryParser("content", analyzer)
    query = query_parser.parse(search_term)
    directory = RAMDirectory.open(index_dir)
    searcher = IndexSearcher(directory)
    hits = searcher.search(query, 10).scoreDocs

    for hit in hits:
        doc_id = hit.doc
        doc = searcher.doc(doc_id)
        print(doc.get("content"))

if __name__ == "__main__":
    lucene.initVM()
    index_dir = "/path/to/index"  # 인덱스 디렉토리 경로

    # 인덱싱
    directory = RAMDirectory()
    config = IndexWriterConfig(Version.LATEST, StandardAnalyzer())
    writer = IndexWriter(directory, config)
    writer.addDocument(create_document("This is a test document"))
    writer.addDocument(create_document("Another example document"))
    writer.commit()
    writer.close()

    # 검색
    search_term = "test"
    search_index(search_term, index_dir)

위 예제 코드에서는 “This is a test document”와 “Another example document” 두 개의 문서를 인덱싱하고, “test”라는 검색어를 포함하는 문서를 검색하는 예제입니다. index_dir 변수에 인덱스 디렉토리 경로를 설정하고, 필요에 따라 인덱싱할 문서를 추가하고 검색어를 설정하여 결과를 확인할 수 있습니다.

3. 참고 자료

#파이썬 #검색엔진