4

Lucene (具体的には Compass) を使用してフォーラムのスレッドをログに記録していますが、ディスカッションの背後にあるキーワードを抽出する方法が必要です。そうは言っても、誰かが作成したすべてのエントリをインデックスに登録したくはありませんが、特定のコンテキストに関連する「キーワード」のリストがあり、エントリがキーワードに一致し、しきい値を超えている場合は追加しますこれらのエントリをインデックスに追加します。

アナライザーの機能を使用して物事を取り除き、その魔法を実行できるようにしたいのですが、キーワードを照合するためにアナライザーからトークンを返し、特定の単語が言及されている回数をカウントしたいと考えています。

作成されたすべてのエントリのインデックス作成のオーバーヘッドなしで、アナライザーからトークンを取得する方法はありますか?

すべてのエントリを保持するために RAMDirectory を維持し、キーワードのリストを使用して検索を実行し、関連するドキュメントを永続化マネージャにマージして、関連するエントリを実際に保存する必要があると考えていました。

4

2 に答える 2

3

RAMDirectory の使用を完全にスキップできるはずです。を直接呼び出してStandardAnalyzer、トークンのリスト (別名キーワード) を返すことができます。

StandardAnalyzer analyzer = new StandardAnalyzer;
TokenStream stream = analyzer.tokenStream("meaningless", new StringReader("<text>"));
while (true) {
    Token token = stream.next();
    if (token == null) break;

    System.out.println(token.termText());
}

さらに良いのは、独自のフィルターを使用してキーワードを監視する独自のアナライザーを作成することです (難しいことではありません。既存のアナライザーのソース コードを参照してください)。

于 2010-01-10T13:49:54.007 に答える
2

あなたは正しい道を進んでいます。RAMDirectory を使用して各ドキュメントのインデックスを作成し、それを検索して、ドキュメントに関連するキーワードが含まれていることを確認できます。いいえの場合、そのドキュメントを破棄します。それ以外の場合は、永続/メイン インデックスに追加します。

すべてのドキュメントをメモリに保持する必要はありません。不必要に多くのメモリを消費します。

于 2009-10-15T09:04:37.887 に答える