Точный отзыв в lucene java
Я хочу использовать Lucene для вычисления точности и повторения.
Я сделал следующие шаги:
-
Сделал некоторые индексные файлы. Для этого я использовал индексный код и индексированные файлы .txt
, которые существуют в этом пути C:/inn
(в этой папке есть 4 текстовых файла) и переносите их в папку "outt", установив путь индекса к C:/outt
в Indexer код.
-
Создал пакет под названием lia.benchmark
и класс внутри него, который называется "PrecisionRecall", и добавьте externaljars
(rightclick → Java build path → add external jars) и добавили Lucene-benchmark-.3.2.0jar
и Lucene-core-3.3.0jar
-
Задайте путь topicsfile
в коде C:/lia2e/src/lia/benchmark/topics.txt
и
qrelsfile
до C:/lia2e/src/lia/benchmark/qrels.txt
и dir до "C:/outt".
Вот код:
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 и тем. В папке документов (C:\inn) у меня есть 4 txt файла, 2 из которых имеют отношение к моему запросу (запрос - яблоко), поэтому я заполнил qrels и темы.
Файл qrels выглядит следующим образом:
<top>
<num> Number: 0
<title> apple
<desc> Description:
<narr> Narrative:
</top>
и файлы тем, как это:
0 0 789.txt 1
0 0 101.txt 1
Я также попробовал формат Path, например, "C:\inn\789.txt" вместо "789.txt"
но результаты равны нулю:
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
Можете ли вы рассказать мне, что со мной не так?
Мне действительно нужно знать, почему результаты равны нулю.
Ответы
Ответ 1
Я боюсь, что формат qrels.txt
неверен: javadoc предлагает следующее:
Ожидаемый формат ввода:
qnum 0 doc-name is-relevant
Две строки выборки:
19 0 doc303 1
19 0 doc7295 0
(я знаю это 2.3.0 javadoc, но формат не был изменен в версии 3.0)
Итак, кажется, что вы поменяли файлы: TrecTopicsReader
ожидает, что у вас есть в qrels.txt
; TrecJudge
ожидает, что у вас есть topics.txt
.