pylucne中的BufferedReader

时间:2013-08-05 09:23:44

标签: lucene pylucene

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

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

1 个答案:

答案 0 :(得分:0)

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

引用Andi:

  

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

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

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

Just for Completenes:添加此行后,我的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基准测试库,默认情况下不包含在安装库中,因为基准测试api中存在TrecTopicsReader 编译和安装基准: 您必须修改主lucene文件夹中的build.xml,其中存在基准文件夹,然后您必须在主Makefile中包含此jar以将其作为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>

<强>生成文件: 在这里你还需要进行三次修改。为简单起见,请按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文件。