我正在使用pylucne来构建搜索系统。我正在使用TREC数据来测试我的系统。我已经成功编写了索引器和搜索器代码。现在我想使用TREC主题来评估我的系统。为此,有一个名为TrecTopicsReader()
的类,它从TREC格式的主题文件中读取查询。但是该类的readQueries(BufferedReader reader)
需要传递给它的BufferedReader
主题文件对象。
如何在pylucene中执行此操作。 BufferedReader在pylucene JCC中不可用。
答案 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文件。