テキストからフレーズやキーワードを検出するアルゴリズム 質問する

テキストからフレーズやキーワードを検出するアルゴリズム 質問する

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

単語を数えると、非常に一般的な単語 (is、the、for、in、am など) が大量に出てきます。単語とその前後の単語の数を数えましたが、次に何をすればいいのかまったくわかりません。2 語と 3 語のフレーズに関する情報はありますが、このデータをどのように抽出すればよいのでしょうか。

ベストアンサー1

まず第一に、入力テキストに含まれる「境界」に関する情報を保持するようにします。
(そのような情報が簡単に失われていない場合、あなたの質問はトークン化が簡単に行われていることを示唆しています)
トークン化(この場合は単語の解析)プロセス中に、定義できるパターンを探します。表現の境界(句読点、特にピリオドや、複数のLF/CR区切りなど)これらを使用します。また、「the」などの単語も境界としてよく使用されます。このような表現の境界は、通常「否定的」であり、2つのトークンインスタンスを分離するという意味です。ない同じ表現に含めることはできません。いくつかの肯定的な境界は引用符、特に二重引用符です。このタイプの情報は、一部の n-gram をフィルター処理するのに役立ちます (次の段落を参照)。また、「たとえば」や「代わりに」や「必要がある」などの単語のシーケンスも表現の境界として使用できます (ただし、このような情報を使用することは、後で説明する「事前条件」を使用することに近づいています)。

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

より良い方法(おそらく、処理面でも設計/投資面でもより高価になりますが)、入力テキストのドメインや国語に関連する追加の「事前条件」の使用が可能になります。

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

[申し訳ありませんが、今は行かなければなりません (さらに、具体的な目標などについてもっと詳しく知りたいです)。後で詳細とポイントをさらに提供できるように努めます]

[ところで、ここで宣伝したいのですがジョナサン・フェインバーグとダーヴィン・サンクの回答この投稿から、手近なタスクのための方法とツールに関して優れた指針が得られるので、特に、NTLKそしてPython 全般実験のための優れた枠組みを提供する]

おすすめ記事