21

私は、テキストのページとテキストのページのコレクションを分析して支配的な単語を判断する必要があるプロジェクトに取り組んでいます。私のために面倒な作業を処理するライブラリ (C# または Java を優先) があるかどうかを知りたいです。そうでない場合、以下の私の目標を達成するアルゴリズムまたは倍数はありますか。

私がやりたいことは、Web で見つけた URL や RSS フィードから作成されたワード クラウドに似ていますが、視覚化は必要ありません。それらは、大統領候補のスピーチを分析して、テーマや最も使用されている言葉が何であるかを確認するために常に使用されます.

複雑なのは、何千もの短いドキュメントに対してこれを行う必要があり、次にこれらのドキュメントのコレクションまたはカテゴリに対して行う必要があることです。

私の最初の計画は、ドキュメントを解析してから、一般的な単語 (of、the、he、she など) をフィルター処理することでした。次に、残りの単語がテキスト (およびコレクション/カテゴリ全体) に表示される回数を数えます。

問題は、将来、ステミング、複数形などを処理したいということです。また、重要なフレーズを識別する方法があるかどうかも確認したいと思います。(単語の数ではなく、フレーズの数は 2 ~ 3 語をまとめたものです)

役立つ戦略、ライブラリ、またはアルゴリズムに関するガイダンスをいただければ幸いです。

4

7 に答える 7

17

あなたが行っていることの 1 つのオプションは、用語の頻度からドキュメントの頻度の逆数、または tf-idf です。この計算では、最も強い用語の重みが最も高くなります。ここで確認してください: http://en.wikipedia.org/wiki/Tf-idf

もう 1 つのオプションは、単語を特徴として使用する単純ベイズ分類器のようなものを使用し、テキスト内の最も強い特徴を見つけて、ドキュメントのクラスを決定することです。これは、最大エントロピー分類器でも同様に機能します。

これを行うためのツールに関しては、最初に最適なツールは NLTK です。これは、広範なドキュメントとチュートリアルを備えた Python ライブラリです: http://nltk.sourceforge.net/

Java の場合は、OpenNLP を試してください: http://opennlp.sourceforge.net/

フレーズについては、バイグラムとトライグラムを機能として、または tf-idf の用語として使用することによって、私が提供した 2 番目のオプションを検討してください。

幸運を!

于 2008-10-20T22:53:26.693 に答える
5

Robert Elwellの答えに追加するには:

  • 語形のステミングと折りたたみ。英語での簡単な方法は、小文字の単語形式で Porter Stemmingを使用することです。
  • 「一般的な単語」の用語は「ストップワード」または「ストップリスト」です
  • 提案されているように NLTK の本を読むと、これらの入門的な問題の多くがよく説明されます。
  • 取り組まなければならない問題のいくつかは、文の解析 (バイグラムと n グラムの句が文の境界を越えないようにするため)、文のトークンへの分割、所有格の処理方法の決定などです。

このようなものはどれも明確ではなく、「正しい答え」もありません。「nlp」および「natural-language」SO タグも参照してください。

幸運を!これは重要なプロジェクトです。

于 2008-10-20T23:21:44.157 に答える
1

わかりました。これで、テキストを含むドキュメントとドキュメントのコレクション (コーパス) ができました。これを行うにはいくつかの方法があります。

Lucene エンジン (Java) を使用してドキュメントのインデックスを作成することをお勧めします。Lucene は、多数のドキュメントを保持するデータ構造 (インデックス) をサポートしています。ドキュメント自体は、たとえば、作成者、タイトル、テキストなどの「フィールド」を含むことができるデータ構造です。インデックスを作成するフィールドと作成しないフィールドを選択できます。

ドキュメントをインデックスに追加するのは簡単です。Lucene は速度を重視して構築されており、優れたスケーリングも可能です。

次に、用語と頻度を把握します。lucene はインデックス作成プロセス中に既にこれを計算しているため、docFreq 関数を使用して独自の用語頻度関数を作成するか、IndexReader クラスの getTermFreqVectors 関数を使用して用語 (およびその頻度) を取得できます。

並べ替えの方法と、必要な単語をフィルター処理するために使用する基準はあなた次第です。関係を把握するには、wordnet オープン ソース ライブラリに対する Java API を使用できます。単語をステミングするには、Lucene の PorterStemFilter クラスを使用します。フレーズの重要性の部分はややこしいですが、ここまで理解できたら、n-gram 検索を Lucene に統合する方法に関するヒントを検索できます(ヒント)

幸運を!

于 2009-06-05T00:35:14.423 に答える
1

Windows Platform SDK に付属している Windows Indexing Service を使用できます。または、次の紹介を読んで、NLP の概要を理解してください。

http://msdn.microsoft.com/en-us/library/ms693179(VS.85).aspx http://i.msdn.microsoft.com/ms693179.wbr-index-create(en-us,VS. 85).gif

http://i.msdn.microsoft.com/ms693179.wbr-query-process(ja-jp,VS.85).gif

于 2008-10-21T00:54:09.087 に答える
0

MapReduceモデルをチェックして単語数を取得し、tf-idfで説明されているように頻度を導き出します

HadoopはapacheMapReduceフレームワークであり、多くのドキュメントで単語数を数えるという手間のかかる作業に使用できます。 http://hadoop.apache.org/common/docs/current/mapred_tutorial.html

必要なすべてを解決する単一のフレームワークを取得することはできません。必要なものを取得するには、概念とフレームワークの適切な組み合わせを選択する必要があります。

于 2009-09-22T04:00:41.360 に答える
0

また、重要なフレーズを識別する方法があるかどうかも確認したいと思います。(単語の数ではなく、フレーズの数は 2 ~ 3 語をまとめたものです)

問題のこの部分は、コロケーション抽出と呼ばれます。(少なくとも、「重要なフレーズ」を偶然よりもはるかに頻繁に出現するフレーズと見なす場合。)その特定のサブ問題に関する別のSOの質問で回答しました。

于 2009-10-29T18:20:30.420 に答える
0

あなたが探しているのは、bag-of-words ドキュメント クラスタリング/分類と呼ばれているようです。この検索で​​ガイダンスが見つかります。

于 2011-04-10T12:51:09.940 に答える