我想用Lucene來計算Precision和Recall。lucene中的精度調用java
我做下列步驟操作:
提出了一些索引文件。爲此,我使用索引器代碼和索引
.txt
文件,該文件存在於此路徑C:/inn
(此文件夾中有4個文本文件),並通過在索引器代碼中將索引路徑設置爲C:/outt
將它們放在「outt」文件夾中。創建了一個名爲
lia.benchmark
包和裏面的一類被稱爲「PrecisionRecall」,並添加externaljars
(右擊 - > Java構建路徑 - >添加外部罐),並加入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)中,我有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
我也試過路徑格式,即如 「C:\店\ 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
你能告訴我什麼是我的錯?
我真的需要知道爲什麼結果爲零。
作爲一種常規的調試技術,如果您沒有得到您期望的輸出,請在您的程序中向前和向後查詢值,直到找到您希望的值。這樣你就可以確切地知道事情出錯了。 – Gian
我不知道Lucene,但是沒有必要在qrels文件中關閉和標籤? –
pablosaraiva