Точный отзыв в Lucene Java - PullRequest
       17

Точный отзыв в Lucene Java

15 голосов
/ 24 августа 2011

Я хочу использовать Lucene для вычисления точности и отзыва.

Я сделал следующие шаги:

  1. Сделал несколько индексных файлов.Для этого я использовал код индексатора и индексированные .txt файлы, которые существуют по этому пути C:/inn (в этой папке 4 текстовых файла), и перенес их в папку "outt", установив для indexpath значение C:/outt в индексатореcode.

  2. Создан пакет с именем lia.benchmark и класс внутри него, который называется PrecisionRecall, и добавьте externaljars (щелчок правой кнопкой мыши -> Путь сборки Java -> добавить внешнийjars) и добавили Lucene-benchmark-.3.2.0jar и Lucene-core-3.3.0jar

  3. Установите путь 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();  
      }  
    } 
    
  4. Инициализированные qrels и темы.В папке с документами (C: \ inn) у меня есть 4 txt-файла, два из которых имеют отношение к моему запросу (запрос - это apple), поэтому я заполнил 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
    

Можете ли вы сказать мне, что со мной не так?

Мне действительно нужно знать, почему результаты равны нулю.

1 Ответ

3 голосов
/ 05 октября 2011

Боюсь, что формат qrels.txt неправильный: javadoc предлагает следующее:

Ожидаемый формат ввода:

 qnum  0   doc-name     is-relevant

Две строки образца:

 19    0   doc303       1
 19    0   doc7295      0

(я знаю, что это javadoc 2.3.0, но формат не изменился в 3.0)

Так что, похоже, вы поменялись местами: TrecTopicsReader ожидаетчто у вас есть в qrels.txt;TrecJudge ожидает, что у вас есть в topics.txt.

...