web-dev-qa-db-ja.com

Java

何百もの単語からなる長い文字列を受け取り、トークン化し、ストップワードとステムを削除してIRシステムで使用するクラスまたはメソッドを探しています。

例えば:

"大きな太った猫、カンガルーに「私が知っているあなたの一番おかしな男」と言った..."

トークナイザーは句読点を削除し、ArrayListの単語を返します

ストップワードリムーバーは「the」、「to」などの単語を削除します

ステマーは各単語とその「根」を減らします。たとえば、「おかしな」はおかしくなります

よろしくお願いします。

20
Phil

AFAIK Lucene はあなたが望むことをすることができます。 StandardAnalyzerStopAnalyzerを使用すると、Wordの削除を中止できます。 Lucene contrib-Snowball(これには Snowball からの作業が含まれます)プロジェクトと組み合わせて、ステミングも実行できます。

しかし、ステミングについては、この回答も考慮してください。 実際の単語を生成するステミングアルゴリズム

8
jitter

これらは自然言語処理の標準的な要件なので、そのようなツールキットを調べます。 Java OpenNLPから始めます: http://opennlp.sourceforge.net/

他の言語を見ることができる場合は、NLTK(Python)もあります。

「私が知っているおかしな人」は標準の構文ではないため、「あなたが私が知っている最もおかしな人」よりも処理が難しいことに注意してください。不可能ではないが、はるかに難しい。 「あなたの」と「あなたのいる」を同一視するようなシステムは知りません。

6

私はこれまで扱ってきたいくつかのタスクの問題に対処したので、トークナイザーの提案をさせてください。私はそれが答えとして直接与えられているとは思わないので、私はしばしばedu.northwestern.at.utils.corpuslinguistics.tokenizer.*私のトークナイザーのファミリーとして。 PennTreebankTokenizerクラスを使用した場合がいくつかあります。使い方は次のとおりです。

    WordTokenizer wordTokenizer = new PennTreebankTokenizer();
    List<String> words = wordTokenizer.extractWords(text);

この作品へのリンクは here です。免責事項ですが、私はノースウェスタン、グループ、または彼らが行う仕事とは関係ありません。私はたまにコードを使う人です。

1
demongolem

NLP tools の包括的なリストを次に示します。軽量化され、内部の仕組みをより細かく制御できるようになるため、これらを自分で作成することが理にかなっていることがあります。トークン化には単純な正規表現を使用します。ストップワードの場合は、以下のリストまたは他のリストをHashSetにプッシュするだけです。

common-english-words.txt

以下は、多くの1つです ポーターステマーのJava実装 )。

0
msha