Ciao a tutti. Sto creando un piccolo motore di ricerca per indicizzare i documenti utilizzando Lucene.
Nel mio algoritmo di ranking ho la necessità di avere a disposizione la lista di tutti i termini (che ottengo utilizzando una classe di Luke ) con le relative frequenze all'interno di ogni documento. QUI ARRIVA IL PROBLEMA.
Per avere le frequenze dei termini sto utilizzando la classe IndexReader (di Lucene) che fornisce un metodo termFreq() che , cito dalla documentazione ufficiale,
Returns an enumeration of all the documents which contain term. For each document, the document number, the frequency of the term in that document is also provided, for use in search scoring. Thus, this method implements the mapping: Term => <docNum, freq>
Questa enumeration non penso di riuscire a "scorrerla" con un semplice ciclo for ma devo devo utilizzare il metodo next()
Questo metodo, sempre dalla documentazione ufficiale
Moves to the next pair in the enumeration. .
Il problema è che questa coppia <docnum,freq> è sempre nulla, anche se so perfettamente, controllando in fase di debug, che ciò non è vero. Inotre, il metodo descritto restituisce true fin quando ha qualcosa da ciclare e false quando non c'è più niente. UN ALTRO PROBLEMA nasce se utilizzo questo metodo in un ciclo while
while(next()) .... il risultato è un ciclo infinito ...![]()
Non riesco a capire da dove arrivino entrambi i problemi.
Qualcuno ha qualche consiglio? Qualcuno ha mai utilizzato questi metodi?
Grazie
Alle

Rispondi quotando