web-dev-qa-db-ja.com

Javaでテキスト分析/マイニング用のAPIはありますか?

Javaでテキスト分析を行うためのAPIがあるかどうか知りたいです。テキスト内のすべての単語、個別の単語、表現などを抽出できるもの。見つかった単語が数字、日付、年、名前、通貨などであるかどうかを通知できるもの。

今からテキスト分析を始めているので、キックオフに必要なのはAPIだけです。 Webクローラーを作成しましたが、ダウンロードしたデータを分析するための何かが必要です。ページ内の単語数、類似単語、データ型、およびテキストに関連する別のリソースをカウントするメソッドが必要です。

Javaでテキスト分析を行うためのAPIはありますか?

編集:テキストマイニング、テキストをマイニングしたい。これを提供するJavaのAPI。

24
Renato Dinhani

たとえば、標準ライブラリのいくつかのクラスを使用する場合がありますJava.text、またはStreamTokenizerを使用します(要件に応じてカスタマイズできます)。しかし、ご存知のように-インターネットソースからのテキストデータには通常、多くの正書法の間違いがありますパフォーマンスを向上させるには、ファジートークナイザー-Java.textおよびその他の標準ユーティリティは、そのようなコンテキストでは機能が制限されすぎています

したがって、正規表現(Java.util.regex)を使用して、必要に応じて独自の種類のトークナイザーを作成することをお勧めします。

P.S。必要に応じて-生のテキストでテンプレート化されたパーツを認識するためのステートマシンパーサーを作成できます。下の図に単純なステートマシン認識機能が表示される場合があります(テキスト内のはるかに複雑なテンプレートを認識できる、より高度なパーサーを構築できます)。

enter image description here

10
stemm

Named Entity Recogniser を探しているようです。

いくつかの選択肢があります。

CRFClassifier スタンフォード自然言語処理グループから、Java名前付きエンティティ認識機能の実装です。

GATE(テキストエンジニアリングの一般アーキテクチャ) 、言語処理用のオープンソーススイート。開発者向けのページのスクリーンショットをご覧ください: http://gate.ac.uk/family/developer.html 。それはあなたにこれが何ができるかについての簡単な考えを与えるはずです。 ビデオチュートリアル は、このソフトウェアが提供するもののより良い概要を提供します。

ニーズに合わせて、そのうちの1つをカスタマイズする必要がある場合があります。

他のオプションもあります:


CRFClassifierのトレーニングに関しては、 FAQで簡単な説明 を見つけることができます。

...トレーニングデータはタブで区切られた列にある必要があり、マップを介してそれらの列の意味を定義します。 1つの列は「answer」と呼ばれる必要があり、NERクラスがあり、既存の機能は「Word」や「tag」などの名前を認識しています。データファイル、マップ、およびプロパティファイルを介して生成するフィーチャを定義します。 NERFeatureFactoryのJavadocでさまざまなプロパティが生成する機能についてはかなりのドキュメントがありますが、最終的にはソースコードにアクセスしていくつかの質問に答える必要があります...

コードスニペットは CRFClassifierのjavadoc にもあります。

典型的なコマンドラインの使用法

提供されたシリアル化された分類子を使用してトレーニング済みモデルをテキストファイルで実行するには、次のようにします。

Java -mx500m edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier conll.ner.gz -textFile samplesentences.txt

プロパティファイル(トレイン、テスト、またはランタイム)のすべてのパラメーターを指定する場合:

Java -mx1g edu.stanford.nlp.ie.crf.CRFClassifier -prop propFile

コマンドラインから単純なNERモデルをトレーニングおよびテストするには:

Java -mx1000m edu.stanford.nlp.ie.crf.CRFClassifier -trainFile trainFile -testFile testFile -macro > output

26
William Niu

大量のデータを処理している場合は、Apacheの Lucene が必要なものに役立つ可能性があります。

それ以外の場合は、標準のパターンクラスに大きく依存する独自のAnalyzerクラスを作成するのが最も簡単な場合があります。このようにして、単語、境界、数字、日付などと見なされるテキストを制御できます。たとえば、20110723は日付または数字ですか?データをよりよく「理解」するために、マルチパス解析アルゴリズムを実装する必要がある場合があります。

8
scott

車輪の再発明ではなく、LuceneのAnalysisクラスとStemmerクラスを採用したいと思います。彼らはケースの大部分をカバーしています。追加クラスとcontribクラスも参照してください。

2
Michael-O

LingPipe もご覧になることをお勧めします。 Webサービスに問題がない場合は、 この記事 さまざまなAPIの概要がわかります。

2
sumit