X-Git-Url: https://git.mdrn.pl/pylucene.git/blobdiff_plain/a2e61f0c04805cfcb8706176758d1283c7e3a55c..aaeed5504b982cf3545252ab528713250aa33eed:/lucene-java-3.5.0/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/quality/trec/QueryDriver.java diff --git a/lucene-java-3.5.0/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/quality/trec/QueryDriver.java b/lucene-java-3.5.0/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/quality/trec/QueryDriver.java new file mode 100644 index 0000000..a604a8f --- /dev/null +++ b/lucene-java-3.5.0/lucene/contrib/benchmark/src/java/org/apache/lucene/benchmark/quality/trec/QueryDriver.java @@ -0,0 +1,100 @@ +package org.apache.lucene.benchmark.quality.trec; + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.PrintWriter; +import java.util.HashSet; +import java.util.Set; + +import org.apache.lucene.benchmark.quality.Judge; +import org.apache.lucene.benchmark.quality.QualityBenchmark; +import org.apache.lucene.benchmark.quality.QualityQuery; +import org.apache.lucene.benchmark.quality.QualityQueryParser; +import org.apache.lucene.benchmark.quality.QualityStats; +import org.apache.lucene.benchmark.quality.utils.SimpleQQParser; +import org.apache.lucene.benchmark.quality.utils.SubmissionReport; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.store.FSDirectory; + +/** + * + * + **/ +public class QueryDriver { + public static void main(String[] args) throws Exception { + if (args.length < 4 || args.length > 5) { + System.err.println("Usage: QueryDriver [querySpec]"); + System.err.println("topicsFile: input file containing queries"); + System.err.println("qrelsFile: input file containing relevance judgements"); + System.err.println("submissionFile: output submission file for trec_eval"); + System.err.println("indexDir: index directory"); + System.err.println("querySpec: string composed of fields to use in query consisting of T=title,D=description,N=narrative:"); + System.err.println("\texample: TD (query on Title + Description). The default is T (title only)"); + System.exit(1); + } + + File topicsFile = new File(args[0]); + File qrelsFile = new File(args[1]); + SubmissionReport submitLog = new SubmissionReport(new PrintWriter(args[2]), "lucene"); + FSDirectory dir = FSDirectory.open(new File(args[3])); + IndexReader r = IndexReader.open(dir, true); + IndexSearcher searcher = new IndexSearcher(r); + String fieldSpec = args.length == 5 ? args[4] : "T"; // default to Title-only if not specified. + + int maxResults = 1000; + String docNameField = "docname"; + + PrintWriter logger = new PrintWriter(System.out, true); + + // use trec utilities to read trec topics into quality queries + TrecTopicsReader qReader = new TrecTopicsReader(); + QualityQuery qqs[] = qReader.readQueries(new BufferedReader(new FileReader(topicsFile))); + + // prepare judge, with trec utilities that read from a QRels file + Judge judge = new TrecJudge(new BufferedReader(new FileReader(qrelsFile))); + + // validate topics & judgments match each other + judge.validateData(qqs, logger); + + Set fieldSet = new HashSet(); + if (fieldSpec.indexOf('T') >= 0) fieldSet.add("title"); + if (fieldSpec.indexOf('D') >= 0) fieldSet.add("description"); + if (fieldSpec.indexOf('N') >= 0) fieldSet.add("narrative"); + + // set the parsing of quality queries into Lucene queries. + QualityQueryParser qqParser = new SimpleQQParser(fieldSet.toArray(new String[0]), "body"); + + // run the benchmark + QualityBenchmark qrun = new QualityBenchmark(qqs, qqParser, searcher, docNameField); + qrun.setMaxResults(maxResults); + QualityStats stats[] = qrun.execute(judge, submitLog, logger); + + // print an avarage sum of the results + QualityStats avg = QualityStats.average(stats); + avg.log("SUMMARY", 2, logger, " "); + + searcher.close(); + r.close(); + dir.close(); + } + +}