0

我正在使用 pylucne 构建搜索系统。我正在使用 TREC 数据来测试我的系统。我已经成功编写了索引器和搜索器代码。现在我想使用 TREC 主题来评估我的系统。为此,有一个名为的类TrecTopicsReader(),它从 TREC 格式的主题文件中读取查询。但是readQueries(BufferedReader reader)那个类需要一个BufferedReader主题文件对象传递给它。

如何在 pylucene 中执行此操作。BufferedReader 在 pylucene JCC 中不可用。

4

1 回答 1

0

在等待有人回答后,我也在 pylucene 开发者邮件列表上问了这个问题。
Andi Vajda 在那里回答。我代表安迪回答这个问题。

引用安迪的话:

在 PyLucene Makefile 中找到 jcc 调用并将 java.io.BufferedReader 添加到长命令行(根据需要不要忘记结尾的 \)并重建 PyLucene。

更多信息:
在 pyLucene 的 Makefile 中,你会发现这一行GENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \。在这应该有一行--package java.io,添加您想要添加到 JCC 的类(BufferedReader),以便它可用于 python 代码。
然后再次编译安装pylucene。(你可以在 PyLucene 的文档中找到关于编译和安装的信息,或者你也可以使用这个)。

此外,BufferedReader要从文件中创建对象,您将需要FileReader. 所以也加上。

仅用于完整性:添加此行后,我GENERATE将如下所示:

GENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \
           $(JCCFLAGS) --use_full_names \
           --package java.lang java.lang.System \
                               java.lang.Runtime \
           --package java.util java.util.Arrays \
                               java.util.Collections \
                               java.util.HashMap \
                               java.util.HashSet \
                               java.util.TreeSet \
                               java.lang.IllegalStateException \
                               java.lang.IndexOutOfBoundsException \
                               java.util.NoSuchElementException \
                     java.text.SimpleDateFormat \
                     java.text.DecimalFormat \
                     java.text.Collator \
           --package java.util.concurrent java.util.concurrent.Executors \
           --package java.util.regex \
           --package java.io java.io.StringReader \
                             java.io.InputStreamReader \
                             java.io.FileInputStream \
                             java.io.BufferedReader \
                             java.io.FileReader \
           --exclude org.apache.lucene.sandbox.queries.regex.JakartaRegexpCapabilities \
           --exclude org.apache.regexp.RegexpTunnel \
           --python lucene \
           --mapping org.apache.lucene.document.Document 'get:(Ljava/lang/String;)Ljava/lang/String;' \
           --mapping java.util.Properties 'getProperty:(Ljava/lang/String;)Ljava/lang/String;' \
           --sequence java.util.AbstractList 'size:()I' 'get:(I)Ljava/lang/Object;' \
           org.apache.lucene.index.IndexWriter:getReader \
           --version $(LUCENE_VER) \
           --module python/collections.py \
           --module python/ICUNormalizer2Filter.py \
           --module python/ICUFoldingFilter.py \
           --module python/ICUTransformFilter.py \
           $(RESOURCES) \
           --files $(NUM_FILES)

这样做还不够,您还必须编译 lucene 基准库,它默认不包含在安装库中,因为TrecTopicsReader它存在于基准 api 中。 要编译和安装基准:您必须修改主 lucene 文件夹中的 build.xml,其中存在基准文件夹,然后您必须将此 jar 包含在主 Makefile 中以将其作为 egg 安装到 python 库中。

build.xml:您必须进行三处修改。为简单起见,请遵循jar-test-framework并且无论出现在哪里,都尝试为jar-benchmark.

你必须做的三个改变是:

1) <target name="package" depends="jar-core, jar-test-framework, build-modules, init-dist, documentation"/><target name="package" depends="jar-core, jar-test-framework, jar-benchmark, build-modules, init-dist, documentation"/>

2)对于规则

  <target name="jar" depends="jar-core,jar-test-framework"
          description="Jars core, codecs, test-framework, and all modules">
    <modules-crawl target="jar-core"/>
  </target>

将其替换为

  <target name="jar" depends="jar-core,jar-test-framework, jar-benchmark"
          description="Jars core, codecs, test-framework, and all modules">
    <modules-crawl target="jar-core"/>
  </target>

3)在命名的目标之后添加以下目标/规则jar-test-framework

<target name="jar-benchmark">
    <ant dir="${common.dir}/benchmark" target="jar-core" inheritAll="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
  </target>

MakeFile:在这里你还必须做三处修改。为简单起见,请遵循HIGHLIGHTER_JAR并添加类似的规则BENCHMARK_JAR。您必须进行的三个更改是:

1)以类似的方式查找JARS+=$(HIGHLIGHTER_JAR)并添加。JARS+=$(BENCHMARK_JAR)

2)以类似的方式在此行之后查找HIGHLIGHTER_JAR=$(LUCENE)/build/highlighter/lucene-highlighter-$(LUCENE_VER).jar并添加。BENCHMARK_JAR=$(LUCENE)/build/benchmark/lucene-benchmark-$(LUCENE_VER).jar

3)在那之后找到规则$(ANALYZERS_JAR):和另一条规则$(BENCHMARK_JAR):

$(BENCHMARK_JAR): $(LUCENE_JAR)
cd $(LUCENE)/benchmark; $(ANT) -Dversion=$(LUCENE_VER) compile

为了完整起见,这里是我的最终 Mkaefile 和 build.xml 文件。

于 2013-08-06T17:36:30.540 回答