Как создать собственный анализатор в Pylucene 8.6.1?

Я просмотрел это, это и this, но я не уверен, почему они не работают для меня.

Обычно я использую анализатор, как показано ниже.

import lucene
from org.apache.lucene.analysis.core import WhitespaceAnalyzer
from org.apache.lucene.index import IndexWriterConfig, IndexWriter
from org.apache.lucene.store import SimpleFSDirectory
from java.nio.file import Paths
from org.apache.lucene.document import Document, Field, TextField

index_path = "./index"

lucene.initVM()

analyzer =  WhitespaceAnalyzer()
config = IndexWriterConfig(analyzer)
store = SimpleFSDirectory(Paths.get(index_path))
writer = IndexWriter(store, config)

doc = Document()
doc.add(Field("title", "The quick brown fox.",  TextField.TYPE_STORED))
writer.addDocument(doc)

writer.close()
store.close()

Вместо WhitespaceAnalyzer() я хотел бы использовать MyAnalyzer(), который должен иметь LowerCaseFilter и WhitespaceTokenizer.

from org.apache.lucene.analysis.core import LowerCaseFilter, WhitespaceTokenizer
from org.apache.pylucene.analysis import PythonAnalyzer

class MyAnalyzer(PythonAnalyzer):
    def __init__(self):
        PythonAnalyzer.__init__(self)

    def createComponents(self, fieldName):
        # What do I write here?

Не могли бы вы помочь мне написать и использовать MyAnalyzer()?


person PSK    schedule 25.01.2021    source источник


Ответы (1)


Я нашел здесь и здесь, что ниже работает.

from org.apache.lucene.analysis.core import LowerCaseFilter, WhitespaceTokenizer
from org.apache.pylucene.analysis import PythonAnalyzer
from org.apache.lucene.analysis import Analyzer

class MyAnalyzer(PythonAnalyzer):
    def __init__(self):
        PythonAnalyzer.__init__(self)

    def createComponents(self, fieldName):
        source = WhitespaceTokenizer()
        result = LowerCaseFilter(source)
        return Analyzer.TokenStreamComponents(source, result)

Было бы здорово, если бы кто-нибудь мог указать мне правильное направление, чтобы правильно найти этот ответ.

person PSK    schedule 26.01.2021