PyLucene का उपयोग करके Lucene 8.6.1 सूचकांक से सभी टोकन की सूची कैसे प्राप्त करें?

Nov 22 2020

मुझे इस प्रश्न से कुछ दिशा मिली है । मैं सबसे पहले नीचे की तरह सूचकांक बनाता हूं।

import lucene
from  org.apache.lucene.analysis.standard import StandardAnalyzer
from org.apache.lucene.index import IndexWriterConfig, IndexWriter, DirectoryReader
from org.apache.lucene.store import SimpleFSDirectory
from java.nio.file import Paths
from org.apache.lucene.document import Document, Field, TextField
from org.apache.lucene.util import BytesRefIterator

index_path = "./index"

lucene.initVM()

analyzer = StandardAnalyzer()
config = IndexWriterConfig(analyzer)
if len(os.listdir(index_path))>0:
    config.setOpenMode(IndexWriterConfig.OpenMode.APPEND)

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

doc = Document()
doc.add(Field("docid", "1",  TextField.TYPE_STORED))
doc.add(Field("title", "qwe rty", TextField.TYPE_STORED))
doc.add(Field("description", "uio pas", TextField.TYPE_STORED))
writer.addDocument(doc)

writer.close()
store.close()

मैं फिर नीचे की तरह एक क्षेत्र के लिए सभी शर्तों को प्राप्त करने का प्रयास करता हूं।

store = SimpleFSDirectory(Paths.get(index_path))
reader = DirectoryReader.open(store)

प्रयास 1: उपयोग करने की कोशिश next()के रूप में में इस्तेमाल किया इस सवाल का जो की एक विधि प्रतीत हो रहा है BytesRefIteratorद्वारा कार्यान्वित TermsEnum

for lrc in reader.leaves():
    terms = lrc.reader().terms('title')
    terms_enum = terms.iterator()
    while terms_enum.next():
        term = terms_enum.term()
        print(term.utf8ToString())

हालाँकि, मुझे लगता है कि next()विधि का उपयोग करने में सक्षम नहीं हो सकता ।

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-47-6515079843a0> in <module>
      2     terms = lrc.reader().terms('title')
      3     terms_enum = terms.iterator()
----> 4     while terms_enum.next():
      5         term = terms_enum.term()
      6         print(term.utf8ToString())

AttributeError: 'TermsEnum' object has no attribute 'next'

प्रयास 2: इस प्रश्न की टिप्पणियों में सुझाए गए लूप को बदलने की कोशिश कर रहा है ।

while next(terms_enum):
    term = terms_enum.term()
    print(term.utf8ToString())

हालांकि, ऐसा लगता TermsEnumहै कि पायथन द्वारा एक पुनरावृत्‍ति को समझा नहीं गया है।

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-48-d490ad78fb1c> in <module>
      2     terms = lrc.reader().terms('title')
      3     terms_enum = terms.iterator()
----> 4     while next(terms_enum):
      5         term = terms_enum.term()
      6         print(term.utf8ToString())

TypeError: 'TermsEnum' object is not an iterator

मैं इस बात से अवगत हूं कि मेरे प्रश्न का उत्तर इस प्रश्न के रूप में दिया जा सकता है । फिर मुझे लगता है कि मेरा प्रश्न वास्तव में है, मुझे सभी शर्तें कैसे मिलेंगी TermsEnum?

जवाब

1 PSK Nov 23 2020 at 00:46

मैंने पाया कि नीचे और यहाँ से जो फ़ाइल test_FieldEnumeration()में है, नीचे काम करता test_Pylucene.pyहै pylucene-8.6.1/test3/

for term in BytesRefIterator.cast_(terms_enum):
    print(term.utf8ToString())

एक उत्तर को स्वीकार करने में खुशी होती है जिसमें इससे अधिक स्पष्टीकरण है।