Lucene pylucne中的BufferedReader
我正在使用pylucne建立一个搜索系统。我正在使用TREC数据来测试我的系统。我已经成功地编写了索引器和搜索器代码。现在我想使用TREC主题来评估我的系统。为此,有一个名为的类从TREC格式的主题文件中读取查询。但是该类的Lucene pylucne中的BufferedReader,lucene,pylucene,Lucene,Pylucene,我正在使用pylucne建立一个搜索系统。我正在使用TREC数据来测试我的系统。我已经成功地编写了索引器和搜索器代码。现在我想使用TREC主题来评估我的系统。为此,有一个名为的类从TREC格式的主题文件中读取查询。但是该类的readquerys(BufferedReader reader)需要一个BufferedReadertopics文件对象传递给它 如何在pylucene做到这一点。BufferedReader在pylucene JCC中不可用。在等待别人回答之后,我还在pylucene开发
readquerys(BufferedReader reader)
需要一个BufferedReader
topics文件对象传递给它
如何在pylucene做到这一点。BufferedReader在pylucene JCC中不可用。在等待别人回答之后,我还在pylucene开发者邮件列表上问了这个问题。
安迪·瓦伊达回答说。我代表安迪回答这个问题 引用Andi: 在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
。所以再加上这个
仅适用于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 LIB中
build.xml:
你必须做三次修改。为了简单起见,请遵循jar测试框架
,如果有,请尝试为jar基准
创建类似的模式
您必须做的三个更改是:
1)
将其替换为
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>
生成文件:
在这里,您还必须进行三次修改。为了简单起见,请遵循HIGHLIGHTER\u-JAR
并为BENCHMARK\u-JAR
添加类似的规则。您必须进行的三项更改是:
1) 找到JARS+=$(HIGHLIGHTER\u-JAR)
并以类似方式在其之后添加JARS+=$(BENCHMARK\u-JAR)
2) 找到HIGHLIGHTER\u JAR=$(LUCENE)/build/HIGHLIGHTER/LUCENE HIGHLIGHTER-$(LUCENE\u VER.JAR
,并以类似方式在此行后添加BENCHMARK\u JAR=$(LUCENE)/build/BENCHMARK/LUCENE BENCHMARK-$(LUCENE\u VER.JAR
3) 找到规则$(ANALYZERS\u-JAR):
,然后找到另一个规则$(BENCHMARK\u-JAR):
$(BENCHMARK_JAR): $(LUCENE_JAR)
cd $(LUCENE)/benchmark; $(ANT) -Dversion=$(LUCENE_VER) compile
为了完整起见,这里是我的最终Mkaefile和build.xml文件
<target name="jar-benchmark">
<ant dir="${common.dir}/benchmark" target="jar-core" inheritAll="false">
<propertyset refid="uptodate.and.compiled.properties"/>
</ant>
</target>
$(BENCHMARK_JAR): $(LUCENE_JAR)
cd $(LUCENE)/benchmark; $(ANT) -Dversion=$(LUCENE_VER) compile