3

集合知の目的で Drupal データベースのコンテンツを分析しようとしています。

これまでのところ、さまざまなコンテンツ (主にフォーラムの投稿) をトークン化し、ストップ ワードを削除した後にトークンをカウントする簡単な例を作成することができました。

Lucene で提供される は、StandardTokenizerホスト名と電子メールをトークン化できるはずですが、コンテンツに HTML を埋め込むこともできます。

Pubblichiamo la presentazione di IBM riguardante DB2 per i vari sistemi operativi
Linux, UNIX e Windows.\r\n\r\nQuesto documento sta sulla piattaforma KM e lo potete
scaricare a questo <a href=\'https://sfkm.griffon.local/sites/BSF%20KM/BSF/CC%20T/Specifiche/Eventi2008/IBM%20DB2%20for%20Linux,%20UNIX%20e%20Windows.pdf\' target=blank>link</a>.

これは、次のようにトークン化されます。

pubblichiamo -> 1
presentazione -> 1
ibm -> 1
riguardante -> 1
db2 -> 1
vari -> 1
sistemi -> 1
operativi -> 1
linux -> 1
unix -> 1
windows -> 1
documento -> 1
piattaforma -> 1
km -> 1
potete -> 1
scaricare -> 1
href -> 1
https -> 1
sfkm.griffon.local -> 1
sites -> 1
bsf -> 1
20km/bsf -> 1
cc -> 1
20t/specifiche/eventi2008/ibm -> 1
20db2 -> 1
20for -> 1
20linux -> 1
20unix -> 1
20e -> 1
20windows.pdf -> 1
target -> 1
blank -> 1
link -> 1

私がしたいのは、リンクをまとめて、役に立たないhtml タグ (<pre>や など) を削除することです。<strong>

Filter または別の Tokenizer を作成する必要がありますか? トークナイザーは標準のものを置き換える必要がありますか、それともそれらを混ぜ合わせることはできますか? 最も難しい方法はStandardTokenizerImpl、それを新しいファイルにコピーしてからカスタム動作を追加することですが、今のところ Lucene の実装に深く入り込みたくありません (徐々に学習します)。

すでに同様のものが実装されている可能性がありますが、私はそれを見つけることができませんでした。

編集: 見てみるとStandardTokenizerImpl、実際の実装を変更して拡張する必要がある場合、lexflexを使用して自分で行うよりも便利ではないと思います..

4

2 に答える 2

2

一般に、Lucene を使用して HTML マークアップを含むドキュメントのインデックスを作成する場合は、最初に HTML を解析して、残したい部分を含むテキスト表現に変換し、それからそれを Tokenizer にフィードしてインデックスを作成する必要があります。

jGuru: HTML ドキュメントのインデックスを作成するにはどうすればよいですか? を参照してください。これを行う方法の詳細を説明する FAQ については。

于 2009-12-01T15:47:36.397 に答える
2

これは、テキストを lucene に渡してトークン化する前に前処理することで最も簡単に実現できます。Jerichoなどの html パーサーを使用して、重要でないタグを取り除き、タグからテキストを抽出することで、コンテンツを html なしのテキストに変換します。Jericho のTextExtractorはこれに最適で、使いやすいです。

String text = "Pubblichiamo la presentazione di IBM riguardante DB2 per i vari sistemi operativi"
    +"Linux, UNIX e Windows.\r\n\r\nQuesto documento sta sulla piattaforma KM e lo potete"
    +"scaricare a questo <a href=\'https://sfkm.griffon.local/sites/BSF%20KM/BSF/CC%20T/Specifiche/Eventi2008/IBM%20DB2%20for%20Linux,%20UNIX%20e%20Windows.pdf\' target=blank>link</a>.";

TextExtractor te = new TextExtractor(new Source(text)){
    @Override
    public boolean excludeElement(StartTag startTag) {
        return startTag.getName() != HTMLElementName.A;
    }
};
System.out.println(te.toString());

これは以下を出力します:

Linux、UNIX、Windows のさまざまなシステムで運用されている IBM リガーダント DB2 を公開しています。Questo documento sta sulla piattaforma KM e lo potetescaricare a questo link.

カスタム Lucene Tokenizer を html フィルターで使用することもできますが、これは最も簡単な解決策ではありません。Jericho を使用すると、このタスクの開発時間を確実に節約できます。lucene 用の既存の html アナライザーは、ページ上のすべてのテキストを保持するため、おそらくあなたが望むことを正確に行いたくないでしょう。これに対する唯一の注意点は、すべてを 1 つのストリームとして処理するのではなく、テキストを 2 回処理することになることですが、テラバイト単位のデータを処理する場合を除き、このパフォーマンスの考慮事項を気にする必要はありません。アプリを具体化して、とにかく問題として特定しました。

于 2009-12-01T15:57:42.370 に答える