【发布时间】:2011-11-02 12:09:23
【问题描述】:
我想用 Lucene 来计算 Precision 和 Recall。
我做了这些步骤:
制作了一些索引文件。为此,我使用了索引器代码并索引了此路径
C:/inn中存在的.txt文件(此文件夹中有 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(); } } -
已初始化 qrel 和主题。在文档文件夹(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:\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
你能告诉我我有什么问题吗?
我真的需要知道为什么结果为零。
【问题讨论】:
-
作为一种通用的调试技术,如果你没有得到你期望的输出,那么在你的程序中越来越早地向后工作并询问值,直到你找到你做的值> 期待。这样您就可以准确找出问题所在。
-
我不知道Lucene,但是qrels文件中的
和 标签是不是必须要关闭?
标签: java lucene search-engine