このチュートリアルの目的は、自然言語処理 (NLP) の概念を通じて Python でテキスト データを分析できるようにすることです。まず、テキストを小さなチャンクにトークン化し、単語をそのルート形式に正規化し、さらに分析を行う準備としてドキュメント内のノイズを除去する方法を学習します。
さあ始めましょう! 前提条件このチュートリアルでは、Python の nltk ライブラリを使用して、テキストに対するすべての NLP 操作を実行します。このチュートリアルを書いている時点では、nltk のバージョン 3.4 を使用しています。ライブラリをインストールするには、ターミナルで pip コマンドを使用します。
システムにインストールされている nltk のバージョンを確認するには、ライブラリを Python インタープリターにインポートしてバージョンを確認します。
このチュートリアルの一部の操作を実行するには、特定の nltk リソースをダウンロードする必要がある場合があります。必要に応じて各リソースについて説明します。 ただし、このチュートリアルの後半で個々のリソースをダウンロードせずに今すぐ取得したい場合は、次のコマンドを実行します。
ステップ1: トークンに変換するコンピュータシステムは本質的に自然言語の意味を見つけることができません。自然言語を処理する最初のステップは、生のテキストをトークンに変換することです。トークンは連続した文字の組み合わせであり、特定の意味を持ちます。文をトークンに分割する方法はあなた次第です。たとえば、単純な方法としては、スペースで文を分割して個々の単語に分割する方法があります。 NLTK ライブラリでは、word_tokenize() 関数を使用して文字列をトークンに変換できます。ただし、最初に punkt リソースをダウンロードする必要があります。ターミナルで次のコマンドを実行します。
次に、word_tokenizefromnltk.tokenize をインポートして使用する必要があります。
コードの出力は次のようになります。
word_tokenize は空白に基づいて文字列を分割するだけでなく、句読点もトークンに分割することに気づくでしょう。分析中に句読点を残すかどうかはあなた次第です。 ステップ2: 単語を基本形に変換する自然言語を扱う場合、同じ単語に複数の文法形式があることに気付くことがよくあります。たとえば、「go」、「going」、「gone」は同じ動詞「go」の形です。 プロジェクトの必要性により、単語のさまざまな文法形式を維持する必要があるかもしれませんが、同じ単語のさまざまな文法形式を基本形式に変換する方法について説明しましょう。単語を基本語に変換するには 2 つの手法を使用できます。 最初のテクニックはステミングです。ステミングは、単語から接辞を削除する単純なアルゴリズムです。 NLTK にはさまざまなステミング アルゴリズムが用意されています。このチュートリアルでは、ポーターのアルゴリズムを使用します。 まず、nltk.stem.porter から PorterStemmer を取得します。次に、ステマーを stemmer 変数に初期化し、.stem() メソッドを使用して単語の基本形を検索します。
上記のコードの出力は go です。上記の「go」の他の形式に対してステマーを実行すると、ステマーが同じ基本形式「go」を返すことがわかります。しかし、語幹抽出は接辞の削除に基づく単純なアルゴリズムにすぎないため、その言語であまり一般的でない単語の場合は失敗します。 たとえば、「constitutes」という単語の語幹を解析しようとすると、直感に反する結果が得られます。
出力は「constitut」であることがわかります。 この問題は、より洗練された方法を使用して、特定のコンテキスト内の単語の基本形を見つけることで解決できます。このプロセスは、レマタイズ化と呼ばれます。レンマ化は、テキストのコンテキストと語彙に基づいて単語を正規化します。 NLTK では、WordNetLemmatizer クラスを使用して文をレマタイズできます。 まず、Python ターミナルの NLTK ダウンローダーから wordnet リソースをダウンロードする必要があります。
ダウンロードしたら、WordNetLemmatizer クラスをインポートして初期化する必要があります。
lemmatizer を使用するには、.lemmatize() メソッドを使用します。単語とコンテキストの 2 つの引数が必要です。この例では、コンテキストとして「v」を使用します。 .lemmatize() メソッドの出力を確認した後、コンテキストをさらに詳しく調べましょう。
.lemmatize() メソッドが単語「constitutes」をその基本形「constitute」に正しく変換していることがわかります。また、アルゴリズムがより複雑なため、レマタイズ化はステミングよりも時間がかかることにも気づくでしょう。 .lemmatize() メソッドの 2 番目の引数をプログラムで決定する方法を確認しましょう。 NLTK には、文中の単語のコンテキストを判断するのに役立つ pos_tag() 関数があります。しかし、まずは averaged_perceptron_tagger NLTK ダウンローダーからリソースをダウンロードします。
次に、pos_tag() 関数をインポートし、文に対して実行します。
出力はペアのリストであることがわかります。各ペアはトークンとそのタグで構成され、テキスト全体におけるトークンのコンテキストを表します。句読点自体のラベルは次のようになります。
各トークンのコンテキストをどのようにデコードしますか? Web 上のすべてのタグとそれに対応する意味の完全なリストを以下に示します。すべての名詞タグは「N」で始まり、すべての動詞タグは「V」で始まることに注意してください。この情報は、.lemmatize() メソッドの 2 番目の引数で使用できます。
上記のコードの出力は次のようになります。
この出力は予想通りであり、「constitutes」と「magistrates」はそれぞれ「constitute」と「magistrate」に変換されています。 ステップ3: データのクリーニングデータを準備する次のステップは、データをクリーンアップし、分析に意味のないものを削除することです。大まかに言えば、分析から句読点やストップワードを削除することを検討します。 句読点を削除するのはかなり簡単な作業です。ライブラリの句読点オブジェクト文字列には、すべての英語の句読点が含まれています。
このコード スニペットの出力は次のようになります。
トークンから句読点を削除するには、次のコマンドを実行します。
次に、ストップワードの削除に焦点を当てます。ストップワードは、「I」、「a」、「the」など、言語でよく使用される単語であり、テキストを分析する際にほとんど意味を追加しません。したがって、分析からストップワードを削除します。まず、NLTK ダウンローダーからストップワード リソースをダウンロードします。
ダウンロードが完了したら、nltk.corpus からストップワードをインポートし、引数として「english」を指定して .words() メソッドを使用します。以下は 179 個の英語ストップワードのリストです。
このセクションで説明した概念とレマタイズの例を組み合わせて、次の関数 clean_data() を作成できます。さらに、単語がストップワード リストに含まれているかどうかを比較する前に、単語を小文字に変換します。この方法では、ストップワードが文の先頭に現れ、大文字で書かれていても、それをキャプチャすることができます。
この例の出力は次のようになります。
ご覧のとおり、句読点とストップワードは削除されています。 単語の頻度分布NLP の基本的なクリーニング手法について理解できたので、テキスト内の単語の頻度を調べてみましょう。この演習では、グーテンベルクが無料で公開した童話「ネズミと鳥とソーセージ」のテキストを使用します。このおとぎ話のテキストを文字列 text に保存します。 まず、テキストでトークン化し、上で定義した clean_data 関数を使用してクリーンアップします。
テキスト内の単語の頻度分布を調べるには、FreqDistNLTK クラスを使用できます。トークンをパラメータとして使用してクラスを初期化します。次に、.most_common() メソッドを使用して共通の用語を検索します。この場合、上位 10 項目を見つけてみましょう。
このおとぎ話でよく使われる用語を 10 個紹介します。
当然のことながら、最もよく使われた 3 つの単語は、おとぎ話の 3 人の主人公の名前でした。 テキストを分析する場合、単語の頻度はあまり重要ではない場合があります。通常、NLP の次のステップは、ドキュメントのリスト内の単語の重要性を表す統計、つまり TF-IDF (Term Frequency-Inverse Document Frequency) を生成することです。 結論はこのチュートリアルでは、まず Python での自然言語処理について見ていきます。テキストをトークンに変換し、単語を基本形に変換し、最後にテキストをクリーンアップして、分析に意味のない部分を削除します。 このチュートリアルでは簡単な NLP タスクを学習しましたが、探索すべきテクニックは他にもたくさんあります。たとえば、テキスト データに対してトピック モデリングを実行し、テキストで取り上げられている可能性のある共通のトピックを見つけることを目標とする場合があります。 NLP におけるより複雑なタスクは、感情分析モデルを実装して、テキストの背後にある感情を判断することです。 |
>>: LSTM ニューラルネットワークを使用して株価の動向を予測する
[[385451]]この記事はWeChatの公開アカウント「Xinzhiyuan」から転載したもので...
検索アルゴリズム - 指定された開始点から指定された終了点までのパスを計算するグラフ検索アルゴリズム...
ディープラーニングは計算集約型の分野であり、GPU の選択によってディープラーニングの実験が根本的に...
7月7日、MDN Web Documentation Project(旧称Mozilla Deve...
エンタープライズ NetOps チームは、大量の受信データを精査して、ネットワーク上で発生する技術、...
何千年もの間、人々はインテリジェントな機械を構築する方法について考え続けてきました。それ以来、人工知...
[[251968]]最近、湖南省の12歳少年が母親を殺害したというニュースが報道され、遺児の教育問...
OpenAI が Sora をリリースし、テキストからビデオへの AI コンテンツ生成競争に参入。 ...
「ナノロボット」は映画やSF小説に頻繁に登場するキャラクターで、何度も登場して驚くべきスキルを発揮...
[[202011]]クレタ島を海賊や侵略者から守るために、人々は巨大な青銅の戦士タロスを創造しました...
上海で開催されたHUAWEI CONNECT 2019で、ファーウェイはエンタープライズサービス開発...
[[271684]]ビル・ゲイツは、世界を変えるトレンドを予見し、それを活用することで、史上最も成功...
ビデオ内の興味深い部分を見つけるにはどうすればいいですか?時間的アクションローカリゼーション (TA...