0

pylucne を使用して検索システムを構築しています。TREC データを使用してシステムをテストしています。インデクサーとサーチャーのコードの作成に成功しました。ここで、TREC トピックを使用してシステムを評価したいと考えています。これを行うにはTrecTopicsReader()、TREC 形式のトピック ファイルからクエリを読み取る という名前のクラスがあります。ただしreadQueries(BufferedReader reader)、そのクラスにはBufferedReaderトピック ファイル オブジェクトを渡す必要があります。

ピルセンでこれを行う方法。BufferedReader は、ピルセン JCC では使用できません。

4

1 に答える 1

0

誰かが答えてくれるのを待った後、ピルセン開発者のメーリング リストでこの質問もしました。
そこにアンディ・ヴァイダが答えた。私はアンディに代わってこの質問に答えています。

アンディの引用:

PyLucene Makefile で jcc 呼び出しを見つけ、長いコマンド ラインに java.io.BufferedReader を追加し (必要に応じて末尾の \ を忘れないでください)、PyLucene を再構築します。

詳細:
pyLucene の Makefile に、この行がありますGENERATE=$(JCC) $(foreach jar,$(JARS),--jar $(jar)) \。この行には--package java.io、JCC に追加するクラス (BufferedReader) を追加して、Python コードで使用できるようにする必要があります。
次に、ピルセンを再度コンパイルしてインストールします。(コンパイルとインストールに関する情報は、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)

TrecTopicsReaderこれを行うだけでは十分ではありません。ベンチマーク API に存在するため、デフォルトではインストール ライブラリに含まれていない lucene ベンチマーク ライブラリもコンパイルする必要があります。 ベンチマークをコンパイルしてインストールするには: ベンチマーク フォルダーが存在するメインの lucene フォルダー内の build.xml を変更する必要があります。次に、この jar をメインの Makefile に含めて、卵として Python ライブラリにインストールする必要があります。

build.xml : 3 つの変更が必要です。簡単にするために、jar-test-frameworkと に従ってくださいjar-benchmark

あなたがしなければならない3つの変更は次のとおりです。

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 : ここでも、3 つの変更を行う必要があります。簡単にするために、 についてHIGHLIGHTER_JAR同様のルールを追加しBENCHMARK_JARます。必要な変更は次の 3 つです。

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 に答える