何百もの単語からなる長い文字列を受け取り、トークン化し、ストップワードとステムを削除してIRシステムで使用するクラスまたはメソッドを探しています。
例えば:
"大きな太った猫、カンガルーに「私が知っているあなたの一番おかしな男」と言った..."
トークナイザーは句読点を削除し、ArrayList
の単語を返します
ストップワードリムーバーは「the」、「to」などの単語を削除します
ステマーは各単語とその「根」を減らします。たとえば、「おかしな」はおかしくなります
よろしくお願いします。
AFAIK Lucene はあなたが望むことをすることができます。 StandardAnalyzer
とStopAnalyzer
を使用すると、Wordの削除を中止できます。 Lucene contrib-Snowball
(これには Snowball からの作業が含まれます)プロジェクトと組み合わせて、ステミングも実行できます。
しかし、ステミングについては、この回答も考慮してください。 実際の単語を生成するステミングアルゴリズム
これらは自然言語処理の標準的な要件なので、そのようなツールキットを調べます。 Java OpenNLPから始めます: http://opennlp.sourceforge.net/
他の言語を見ることができる場合は、NLTK(Python)もあります。
「私が知っているおかしな人」は標準の構文ではないため、「あなたが私が知っている最もおかしな人」よりも処理が難しいことに注意してください。不可能ではないが、はるかに難しい。 「あなたの」と「あなたのいる」を同一視するようなシステムは知りません。
私はこれまで扱ってきたいくつかのタスクの問題に対処したので、トークナイザーの提案をさせてください。私はそれが答えとして直接与えられているとは思わないので、私はしばしばedu.northwestern.at.utils.corpuslinguistics.tokenizer.*
私のトークナイザーのファミリーとして。 PennTreebankTokenizer
クラスを使用した場合がいくつかあります。使い方は次のとおりです。
WordTokenizer wordTokenizer = new PennTreebankTokenizer();
List<String> words = wordTokenizer.extractWords(text);
この作品へのリンクは here です。免責事項ですが、私はノースウェスタン、グループ、または彼らが行う仕事とは関係ありません。私はたまにコードを使う人です。
NLP tools の包括的なリストを次に示します。軽量化され、内部の仕組みをより細かく制御できるようになるため、これらを自分で作成することが理にかなっていることがあります。トークン化には単純な正規表現を使用します。ストップワードの場合は、以下のリストまたは他のリストをHashSetにプッシュするだけです。
以下は、多くの1つです ポーターステマーのJava実装 )。