在lucene java中进行精确调用

时间:2011-08-24 05:31:08

标签: java lucene search-engine

我想使用Lucene来计算精确度和召回率。

我做了以下步骤:

  1. 制作了一些索引文件。为此,我使用了索引器代码和索引.txt文件,这些文件存在于此路径C:/inn中(此文件夹中有4个文本文件),并通过将索引路径设置为{{{}来将它们带入“outt”文件夹中索引器代码中的1}}。

  2. 创建了一个名为C:/outt的包和一个名为“PrecisionRecall”的类,并添加lia.benchmark(右键单击 - > Java构建路径 - >添加外部jar)并添加了externaljarsLucene-benchmark-.3.2.0jar

  3. 将代码中的Lucene-core-3.3.0jar路径设置为topicsfile
    C:/lia2e/src/lia/benchmark/topics.txtqrelsfile,dir到“C:/ outt”。

    这是代码:

    C:/lia2e/src/lia/benchmark/qrels.txt
  4. 初始化的qrels和主题。在文档文件夹(C:\ inn)中,我有4个txt文件,其中2个与我的查询相关(查询是苹果)所以我填写了qrels和主题。

    像这样的qrels文件:

    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();  
      }  
    } 
    

    和主题文件如下:

    <top>  
        <num> Number: 0 
        <title> apple
        <desc> Description:  
        <narr> Narrative:  
    </top>  
    

    我还尝试了Path格式,例如“C:\ inn \ 789.txt”而不是“789.txt” 但结果是零:

    0    0      789.txt           1
    0    0      101.txt           1
    
  5. 你能告诉我我的错误吗?

    我真的需要知道为什么结果为零。

1 个答案:

答案 0 :(得分:3)

我担心qrels.txt格式错误:the 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中拥有的内容。