Luceneを使用してPrecisionとRecallを計算したいと考えています。lucene javaの精度リコールjava
私はこれらの手順をした:
は、いくつかのインデックスファイルを作りました。これを行うには、インデクサーコードを使用し、このパスに存在する
.txt
ファイルをC:/inn
(このフォルダーに4つのテキストファイルがあります)にしてインデクサーコードのindexpathをC:/outt
に設定して「outt」フォルダーに入れてください。パッケージを作成したは
lia.benchmark
と呼ばれ、内部クラスは「PrecisionRecall」と呼ばれているとexternaljars
を追加(右クリック - > Javaのビルド・パス - >外部jarファイルを追加)し、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
へのパスであり、「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)には、2つのtxtファイルが4つあります。それらのうち2つは、クエリ(appleはクエリ)と関連しているので、qrelsとトピックを埋めました。
qrelsは、このようなファイル:
<top> <num> Number: 0 <title> apple <desc> Description: <narr> Narrative: </top>
とトピックは、このようなファイル:代わりに: "\旅館\ 789.txt C"
0 0 789.txt 1 0 0 101.txt 1
は私もパス形式、すなわち例えばを試してみました"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
私に間違っていることを教えてもらえますか?
結果がゼロである理由を知る必要があります。
一般的なデバッグ手法として、期待する出力が得られない場合は、期待どおりの値を見つけるまで逆方向に作業し、プログラムの以前と以前の値を調べます。そうすれば、状況が間違っている場所を正確に把握することができます。 – Gian
私はLuceneについて知りませんが、とタグをqrelsファイルで閉じる必要はありませんか? –
pablosaraiva