問題タブ [pylucene]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - ピルセン インストール メイクファイル エラー
ピルセン環境を構築すると、この問題が発生します。Windows プラットフォームで makefile を構成する方法がわかりません。Windowsでピルセンを構築する例があれば、誰か助けてください。
は、次のcmd
ことを示しています。
メイクファイルは次のとおりです。
pylucene - ピルセンの一部しか利用できませんか?
Java Luceneコードをpylucene(v 2.3.1)に移植しようとしています。http://svn.apache.org/viewcvs.cgi/lucene/pylucene/trunk/samples/の例を使用していますが 、ほとんどのpyluceneがPythonに組み込まれているようです(ubuntu 12.04、pydev 2.6.0、eclipse 3.7.2)環境は問題ありません。たとえば、lucene.initVM()(JCCが配置されていることを示す)を実行し、... / samples/PorterStemmerAnalyzer.pyから取得した例に従ってPorterステマーを定義できます。
しかし、新しいIndexWriterを作成しようとすると、コンストラクターの最後の引数でつまずきます。
このエラーが発生します:
これは私が現時点で困惑しているエラーですが、他にもいくつかのハックがあります(それらのバージョンから... /サンプル)私も作成しました(しかし心配もします):
lucene.Version.LUCENE_CURRENTをlucene.LucenePackageに置き換えます
lucene.SimpleFSDirectoryとlucene.MMapDirectory
ここまで到達するために。
http://lucene.apache.org/pylucene/features.htmlには、「PyLucene APIは、PyLuceneモジュールのフラットな名前空間ですべてのJavaLuceneクラスを公開します」と記載されています。これは完全には正しくないようです。lucene.StopAnalyzer.ENGLISH_STOP_WORDS_SETはpydevに認識されていますが、lucene.ENGLISH_STOP_WORDS_SETは認識されていません。
だから私は/の一部/古いバージョンを取得しているようです/...?ピルセンは正しくかみ合ったが、全部ではない!?なぜこれなのか?
java - ピルセン 2.9.4 でカスタム コレクターを使用する
ピルセンの特定のトークンの高 PMI 項を計算しようとしています。同僚が動作する Java コードをいくつかくれましたが、それを Python に変換するのに問題があります。特に、コードはカスタム コレクターに依存しています。最初のクエリ コードは次のとおりです。
Term Count Collector クラスは次のとおりです: http://snipt.org/vgGi8
self.searcher.search
このコードは次のエラーで壊れます。
私はいくつかのグーグル検索を行いましたが、役に立ちませんでした-私はluceneが初めてで、これが2.9.4でサポートされている機能ではないのか、ピルセンの問題なのか、コードが間違っているのかわかりません。助けてください!
java - JCC を使用して Python から Java クラスをオーバーライドします。それは可能ですか?
JCC を使用して Java ライブラリの Python ラッパーを作成していますが、Python スクリプト内の Java クラスからメソッドをオーバーライドする必要があります。出来ますか?可能であればどのようにそれを行うことができますか?
analyzer - PyLuceneのDelimitedPayloadFilter?
pylucene を使用してhttp://searchhub.org/2010/04/18/refresh-getting-started-with-payloads/から Java の Python バージョンを実装しようとしています。私のアナライザーは、DelimitedTokenFilter への init 呼び出しで lucene.InvalidArgsError を生成しています
クラスは以下のとおりです。どんな助けも大歓迎です。pylucene 3.6 ビルドの JAR ファイルでコンパイルされた Java バージョンは正常に動作します。
lucene - フィールドを指定するときにLuceneが結果を出さない
Lucene のフィールドを使用してセクション (ドキュメントのマークアップで指定) ごとに Lucene (Pylucene を使用) でインデックスを作成したデータベースがあります。このインデックスはうまく機能しているようです。ドキュメント全体であるデフォルトのフィールドを使用して検索し、妥当な結果を得ることができます。
問題は、特定のセクション (デフォルトではない) を使用して検索すると、特定の数の結果が返されることを期待していますが (で指定されているようにIndexSearcher.search(query, results)
)、代わりに何も返されない可能性があることです。だから私の質問は、指定した結果の数でランク付けされたリストを返すにはどうすればよいですか?
フィールドを指定する唯一の場所は、QueryParser で次のように呼び出します。
macos - Mac に PyLucene をインストールする
Mac で pyLucene を使用できるようにしたいと考えています。セットアップや作成のための各命令は、その前に何かを行う必要があり、どこから始めて、どのウィンドウから何をすべきかを知るのが難しいため、命令は絶望的に失われました.
PyLucene をダウンロードしました。私が最初に疑問に思っているのは、フォルダーをどこに置いたかということです。
それを使用するには、ピルセンのダウンロードに含まれている JCC をビルドする必要があると言われました。
説明書:
コマンド ラインで、次のように入力します。
しかし、これを行うには、適切な場所にいるか、フォルダーを適切な場所に配置する必要があると思います"setup.py" not found
。
この環境で提供できるヘルプはありますか (シェル ウィンドウ? IDE?)。この最初の部分を通過するための助け: JCC の構築、続いてピルセンのセットアップは大歓迎です。
python - PyLucene のカスタム ストップワード
PyLucene には、StopFilter
特定のストップワードに基づいてトークンをフィルター処理するというフィルターがあります。呼び出しの例は次のとおりです。
一連のストップ ワードの引数を置き換えるのは簡単なように思えますが、実際には少し難しいです。
これは でありSet
、実装できません:
PythonSet
PyLucene に付属の a を使用することが他の場所で提案されましたが、これは a のインスタンスではなく、 aSet
では使用できないことが判明しましたStopFilter
。
StopFilter
どうすれば新しいストップワードのセットを与えることができますか?
python - アンダースコアのみに基づいてテキストをトークン化する (スペースを保持する) ピルセンのカスタム トークナイザー
私はピルセンが初めてで、アンダースコアのみに基づいてテキストをトークン化するカスタム アナライザーを構築しようとしています。つまり、空白を保持する必要があります。例: "Hi_this is_awesome" は ["hi", "this is", "awesome"] トークンにトークン化する必要があります。
さまざまなコード例から、CustomTokenizer の incrementToken メソッドをオーバーライドし、同じことを達成するために TokenStream が CustomTokenizer に続いて LowerCaseFilter を使用する必要がある CustomAnalyzer を記述する必要があることを理解しました。
ピルセンに関するドキュメントがほとんどないため、incrementToken メソッドの実装とドットの接続 (通常、アナライザーは TokenStreams に依存する TokenFilter に依存するため、トークナイザーの使用方法) で問題に直面しています。
java - 抽象関数の定義が見つかりません
Lucene コードを変更する必要があります。クエリ用語とインデックスを実際に照合するコードを変更して、新しいスキームを照合に追加する必要があります。
最初に、PyLucene を使用して検索するコードを作成しました。ここで見つけることができます。これは、実際の検索機能を実装するクラスであるため、IndexSearcher クラスに変更を加えたことは明らかです。
次に、コードをたどり、実際に変更するコードを見つけるためにさらに深く掘り下げました。以下は、私が従った呼び出し階層です。
- 私のコードでは、57行目で呼び出しています。次に、 IndexSearcherコード
searcher.search(query, None, 100)
でそれに従いました - まず、428 番線で呼び出し
public TopDocs search(Query query, Filter filter, int n)
ている 271 番線で呼び出しています。protected TopDocs search(Weight weight, ScoreDoc after, int nDocs)
- ここで、この関数では、コードがシングル スレッドであると想定しています (SearchFiles.py のように、マルチスレッド検索を行うことについて言及していません)。
protected TopDocs search(List<AtomicReaderContext> leaves, Weight weight, ScoreDoc after, int nDocs)
そのため、 472 行目で呼び出しています。 - この関数はコレクター オブジェクトを作成し、
protected void search(List<AtomicReaderContext> leaves, Weight weight, Collector collector)
599 行目で呼び出しています。 - この関数には、さらに 2 つの関連する関数呼び出しがあります:
Scorer scorer = weight.scorer(ctx, !collector.acceptsDocsOutOfOrder(), true, ctx.reader().getLiveDocs());
行 613 とscorer.score(collector);
行 616 です。この関数の 1 つは、クエリに一致するドキュメントを選択することです。つまり、そのうちの 1 つは私の関心事です。 - 次に、これらの両方の機能を実行しましたが、以下で説明するものを見つけることができませんでした。
weight.scorer :最初に、Weight オブジェクトが273 行で呼び出され
た関数で作成されたとき、子クラスからではなく、クラス自体のコンストラクターから作成されました。Weight.javaクラスの関数は抽象関数です (113 行目)。IndexSearcher が使用しているこの関数はどこで定義されていますか?createNormalizedWeight(FilteredQuery)
Weight
scorer()
scorer.score() :
Scorer.java は DocIdSetIterator.javaを継承するDocsEnum.javaを継承します。
スコアラーは関数を使用していnextDoc()
ます。これは、関連するドキュメントを決定する関数だと思います(つまり、ドキュメントをクエリに一致させます)。DocIdSetIterator
しかし、この関数も(92行目)で宣言された抽象関数です。繰り返しになりますが、IndexSearcher が使用しているこの関数はどこで定義されているのでしょうか?
Lucene は多くの検索モデル (Vector Space、Language、Okapi BM25) をサポートし、複数のタイプのクエリをサポートします。そのため、モデルとクエリのタイプを選択すると、選択に応じてこれらの関数が定義される可能性があります。しかし、私の SearchFiles.py のコードでは、使用しているクエリとモデルのタイプを選択していません。したがって、Lucene はいくつかのデフォルトの選択を行う必要があります。しかし、私が理解できないのは、これらのデフォルトのシックがどこで作成され、IndexSearcher がこれらの関数を使用するように IndexSearcher コードにどのように含まれているのかということです。