Quiero usar Lucene para calcular la precisión y la recuperación.Recuperación de precisión en lucene java
lo hice estos pasos:
hecho algunos archivos de índice. Para hacer esto, utilicé el código del indexador y los archivos indexados
.txt
que existen en esta rutaC:/inn
(hay 4 archivos de texto en esta carpeta) y los tomo en la carpeta "outt" estableciendo el indexpath enC:/outt
en el código Indexer.Creado un paquete llamado
lia.benchmark
y una clase en su interior que se llama "PrecisionRecall" y añadirexternaljars
(botón derecho del ratón -> Vía de construcción Java -> añadir frascos externos) y se añadióLucene-benchmark-.3.2.0jar
yLucene-core-3.3.0jar
Conjunto la ruta
topicsfile
en el código aC:/lia2e/src/lia/benchmark/topics.txt
y
qrelsfile
aC:/lia2e/src/lia/benchmark/qrels.txt
y dir a "C:/outt".Aquí es código:
package lia.benchmark; import java.io.File; import java.io.PrintWriter; import java.io.BufferedReader; import java.io.FileReader; import org.apache.lucene.search.*; import org.apache.lucene.store.*; import org.apache.lucene.benchmark.quality.*; import org.apache.lucene.benchmark.quality.utils.*; import org.apache.lucene.benchmark.quality.trec.*; public class PrecisionRecall { public static void main(String[] args) throws Throwable { File topicsFile = new File("C:/lia2e/src/lia/benchmark/topics.txt"); File qrelsFile = new File("C:/lia2e/src/lia/benchmark/qrels.txt"); Directory dir = FSDirectory.open(new File("C:/outt")); IndexSearcher searcher = new IndexSearcher(dir, true); String docNameField = "filename"; PrintWriter logger = new PrintWriter(System.out, true); TrecTopicsReader qReader = new TrecTopicsReader(); QualityQuery qqs[] = qReader.readQueries( new BufferedReader(new FileReader(topicsFile))); Judge judge = new TrecJudge(new BufferedReader( new FileReader(qrelsFile))); judge.validateData(qqs, logger); QualityQueryParser qqParser = new SimpleQQParser("title", "contents"); QualityBenchmark qrun = new QualityBenchmark(qqs, qqParser, searcher, docNameField); SubmissionReport submitLog = null; QualityStats stats[] = qrun.execute(judge, submitLog, logger); QualityStats avg = QualityStats.average(stats); avg.log("SUMMARY",2,logger, " "); dir.close(); } }
qrels inicializado y temas. En la carpeta de documentos (C: \ inn) tengo 4 archivos txt, de los cuales 2 son relevantes para mi consulta (la consulta es apple) así que rellené los qrels y los temas. presentar
los qrels así:
<top> <num> Number: 0 <title> apple <desc> Description: <narr> Narrative: </top>
y temas de archivo como este:
0 0 789.txt 1 0 0 101.txt 1
me trataron también el formato de ruta es decir, por ejemplo, "C: \ posada \ 789.txt" en vez de "789.txt" pero los resultados son cero:
0 - contents:apple 0 Stats: Search Seconds: 0.016 DocName Seconds: 0.000 Num Points: 2.000 Num Good Points: 0.000 Max Good Points: 2.000 Average Precision: 0.000 MRR: 0.000 Recall: 0.000 Precision At 1: 0.000 SUMMARY Search Seconds: 0.016 DocName Seconds: 0.000 Num Points: 2.000 Num Good Points: 0.000 Max Good Points: 2.000 Average Precision: 0.000 MRR: 0.000 Recall: 0.000 Precision At 1: 0.000
¿Puede decirme qué sucede conmigo?
Realmente necesito saber por qué los resultados son cero.
Como técnica de depuración general, si no obtiene el resultado que espera, trabaje hacia atrás e interrogue los valores cada vez más temprano en su programa hasta que encuentre los valores que * espera *. De esa forma puedes descubrir exactamente dónde van las cosas mal. – Gian
No sé sobre Lucene, pero ¿no es necesario cerrar las etiquetas y en el archivo qrels? –
pablosaraiva