44

約 10,000 エントリに分割された、マークアップなしの約 100 メガバイトのテキストがあります。「タグ」リストを自動生成したいと考えています。問題は、一緒にグループ化された場合にのみ意味をなす単語グループ (つまり、フレーズ) があることです。

単語を数えるだけで、非常に一般的な単語 (is、the、for、in、am など) が多数得られます。単語とその前後にある他の単語の数を数えましたが、次に何をすべきか本当にわかりません 2 語句と 3 語句に関する情報はありますが、このデータを抽出するにはどうすればよいですか?

4

5 に答える 5

34

何よりもまず、入力テキストに含まれる「境界」に関する情報を保持するようにしてください。
(そのような情報がすぐに失われない場合、あなたの質問はトークン化が容易に行われた可能性があることを意味します)トークン化 (この場合は単語の解析) プロセス中に、表現の境界を定義する可能性のあるパターン(句読点、特にピリオドなど
) を探します。 、および複数の LF/CR 分離にも、これらを使用します. また、「the」のような単語は、しばしば境界として使用できます. そのような式の境界は、通常、確実に分離されない2 つのトークンインスタンスを分離するという意味で「否定的」です.同じ表現に含まれます。いくつかの正の境界は引用符、特に二重引用符です。このタイプの情報は、一部の n グラムを除外するのに役立つ場合があります (次の段落を参照)。また、「たとえば」、「代わりに」、「必要」などの単語シーケンスも表現の境界として使用できます(ただし、このような情報を使用すると、後で説明する「事前」を使用することになります)。

外部データ (入力テキスト以外) を使用しなくても、テキストのディグラムとトリグラム(2 語と 3 語の連続)の統計を実行することで、比較的うまくいく可能性があります。その場合、[ほとんど] かなりの (*) 数のインスタンスを持つシーケンスが、探している「式/フレーズ」のタイプである可能性があります。
このやや大雑把な方法では、いくつかの誤検知が発生しますが、全体としては実行可能です。最初の段落で示唆されているように、「境界」を越えることが知られている n-gram をフィルタリングすると、非常に役立つ可能性があります。自然言語では、文の終わりと文の開始がメッセージ空間の限られたサブセットから引き出される傾向があるため、トークンの組み合わせが生成される可能性があるためです。統計的にはよく表されているように見えますが、通常は意味的に関連していません。

より良い方法(おそらくより高価で、処理面、および設計/投資面で) は、入力テキストのドメインおよび/または各国語に関連する追加の「前置詞」を使用します。

  • POS (品詞) タグ付けは、いくつかの点で非常に便利です (追加の、より客観的な表現境界を提供し、「ノイズ」単語クラス、たとえばすべての記事など、エンティティのコンテキストで使用される場合でも、通常はほとんどありません) OPが作成したいタグクラウドで。
  • 辞書、レキシコンなども非常に役立ちます。特に、「エンティティ」( WordNet用語ではインスタンス) とその代替形式を識別するものです。エンティティはタグ クラウドにとって非常に重要であり (エンティティに含まれる単語のクラスはエンティティだけではありません)、それらを識別することで、エンティティを正規化することもできます (たとえば、「T 上院議員.したがって、重複を排除しますが、基礎となるエンティティの頻度も増やします。
  • コーパスがドキュメント コレクションとして構造化されている場合、TF (Term Frequency) および IDF (Inverse Document Frequency) に関連するさまざまなトリックを使用すると役立つ場合があります。

[申し訳ありませんが、今は行かなければなりません (さらに、具体的な目標などの詳細を教えてください)。後で詳細とポイントを提供しようとします]

[ところで、この投稿からのジョナサン・ファインバーグとダービン・サンクの回答をここに挿入したいと思います。彼らは、目の前の種類のタスクの方法とツールに関して優れた指針を提供するからです. 特に、NTLK大規模な Python は、実験のための優れたフレームワークを提供します]

于 2009-10-29T13:25:29.880 に答える
11

オライリーの本Beautiful DataのPeter Norvigによる素晴らしい章から始めたいと思います。彼は、個人の Web サイト で、必要な ngram データと、美しい Python コード (問題をそのまま、または修正して解決する可能性があります) を提供しています。

于 2009-10-29T13:20:29.640 に答える
8

コロケーション抽出を探しているようです。マニングとシュッツェはこのトピックにを捧げ、私がリンクしたウィキペディアの記事で言及されている「提案された公式」を説明し、評価します。

この回答に章全体を収めることはできません。うまくいけば、彼らのリンクのいくつかが役立つでしょう。(NSPは特に適切に聞こえます。)nltkにはコロケーションモジュールもありますが、ManningとSchützeの本はそれよりも前のものであるため言及されていません。

これまでに投稿された他の回答は、統計的言語処理とより一般的なn-gramを扱っています。コロケーションは特定のサブトピックです。

于 2009-10-29T17:46:38.567 に答える
0

1つの方法は、自分でオートマトンを作成することです。ほとんどの場合、非決定性有限オートマトン(NFA)です。 NFA

もう1つの簡単な方法は、無視、検索、比較などする単語や単語グループを含むファイルを作成し、プログラムの起動時にそれらをメモリに保存して、現在のファイルを比較できるようにすることです。ファイルに含まれている単語/単語グループで解析します。

于 2009-10-29T15:56:03.320 に答える
0

単語のマトリックスを実行します。次に、2 つの連続した単語がある場合は、その適切なセルに 1 つ追加します。

For example you have this sentence.

mat['for']['example'] ++;
mat['example']['you'] ++;
mat['you']['have'] ++;
mat['have']['this'] ++;
mat['this']['sentence'] ++;

これにより、連続する 2 つの単語の値が得られます。この単語 3 単語も実行できます。これには O(n^3) メモリが必要になることに注意してください。

次のようなデータを格納するためにヒープを使用することもできます。

heap['for example']++;
heap['example you']++;
于 2009-10-29T13:19:48.730 に答える