Python-web-scraping-dealing-with-text

提供:Dev Guides
移動先:案内検索

Python Webスクレイピング-テキストの処理

前の章では、Webスクレイピングコンテンツの一部として取得したビデオや画像の処理方法を見てきました。 この章では、Pythonライブラリを使用してテキスト分析を扱い、これについて詳しく学習します。

前書き

Natural Language Tool Kit(NLTK)と呼ばれるPythonライブラリを使用して、テキスト分析を実行できます。 NLTKの概念に進む前に、テキスト分析とWebスクレイピングの関係を理解し​​ましょう。

テキスト内の単語を分析すると、どの単語が重要で、どの単語が異常で、どのようにグループ化されているかを知ることができます。 この分析により、Webスクレイピングのタスクが容易になります。

NLTKを使い始める

自然言語ツールキット(NLTK)は、特に英語などの自然言語のテキストで見つかった品詞を識別してタグ付けするために設計されたPythonライブラリのコレクションです。

NLTKのインストール

次のコマンドを使用して、PythonにNLTKをインストールできます-

pip install nltk

あなたがAnacondaを使用している場合、NLTKのcondaパッケージは、次のコマンドを使用して構築することができます-

conda install -c anaconda nltk

NLTKのデータをダウンロードする

NLTKをインストールした後、プリセットテキストリポジトリをダウンロードする必要があります。 しかし、テキストプリセットリポジトリをダウンロードする前に、次のように import コマンドの助けを借りてNLTKをインポートする必要があります-

mport nltk

今、次のコマンドの助けを借りてNLTKデータをダウンロードすることができます-

nltk.download()

NLTKの利用可能なすべてのパッケージのインストールには時間がかかりますが、すべてのパッケージをインストールすることを常にお勧めします。

その他の必要なパッケージのインストール

また、NLTKを使用して自然言語処理アプリケーションを構築するだけでなく、テキスト分析を行うために、 gensimpattern などの他のPythonパッケージも必要です。

*gensim* -多くのアプリケーションに役立つ堅牢なセマンティックモデリングライブラリ。 次のコマンドでインストールできます-
pip install gensim
*pattern* - *gensim* パッケージを適切に動作させるために使用します。 次のコマンドでインストールできます-
pip install pattern

トークン化

特定のテキストをトークンと呼ばれる小さな単位に分割するプロセスは、トークン化と呼ばれます。 これらのトークンは、単語、数字、または句読点にすることができます。 *単語のセグメンテーション*とも呼ばれます。

トークン化

NLTKモジュールは、トークン化のためのさまざまなパッケージを提供します。 要件に応じてこれらのパッケージを使用できます。 パッケージのいくつかはここで説明されています-

  • sent_tokenizeパッケージ*-このパッケージは、入力テキストを文に分割します。 次のコマンドを使用して、このパッケージをインポートできます-
from nltk.tokenize import sent_tokenize
  • word_tokenizeパッケージ*-このパッケージは、入力テキストを単語に分割します。 次のコマンドを使用して、このパッケージをインポートできます-
from nltk.tokenize import word_tokenize
  • WordPunctTokenizerパッケージ*-このパッケージは、入力テキストと句読点を単語に分割します。 次のコマンドを使用して、このパッケージをインポートできます-
from nltk.tokenize import WordPuncttokenizer

ステミング

どの言語にも、さまざまな形式の単語があります。 言語には、文法的な理由による多くのバリエーションが含まれます。 たとえば、民主主義民主、および*民主化*という言葉を考えてみましょう。 機械学習やWebスクレイピングプロジェクトでは、これらの異なる単語が同じ基本形式を持っていることを機械が理解することが重要です。 したがって、テキストの分析中に単語の基本形を抽出することが有用であると言えます。

これは、語尾を切り落とすことにより、語の基本形を抽出するヒューリスティックなプロセスとして定義されるステミングによって実現できます。

NLTKモジュールは、ステミング用のさまざまなパッケージを提供します。 要件に応じてこれらのパッケージを使用できます。 これらのパッケージの一部はここで説明されています-

  • PorterStemmerパッケージ*-このPythonステミングパッケージは、ポーターのアルゴリズムを使用して基本フォームを抽出します。 次のコマンドを使用して、このパッケージをインポートできます-
from nltk.stem.porter import PorterStemmer

たとえば、このステマーへの入力として「書き込み」という単語を指定すると、出力はステミング後の「書き込み」という単語になります。

  • LancasterStemmerパッケージ*-このPythonステミングパッケージは、ランカスターのアルゴリズムを使用して基本フォームを抽出します。 次のコマンドを使用して、このパッケージをインポートできます-
from nltk.stem.lancaster import LancasterStemmer

たとえば、このステマーへの入力として「書き込み」という単語を指定すると、出力はステミング後の「書き込み」という単語になります。

  • SnowballStemmerパッケージ*-このPythonステミングパッケージは、Snowballのアルゴリズムを使用して基本フォームを抽出します。 次のコマンドを使用して、このパッケージをインポートできます-
from nltk.stem.snowball import SnowballStemmer

たとえば、このステマーへの入力として「書き込み」という単語を指定すると、出力はステミング後の「書き込み」という単語になります。

補題

単語の基本形を抽出する他の方法は、通常語彙と形態素解析を使用して、語尾変化を除去することを目的とした、見出し語化によるものです。 補題化後の単語の基本形は、補題と呼ばれます。

NLTKモジュールは、次のlemmatizationパッケージを提供します-

  • WordNetLemmatizerパッケージ*-動詞として名詞として使用されているかどうかに応じて、単語の基本形を抽出します。 次のコマンドを使用して、このパッケージをインポートできます-
from nltk.stem import WordNetLemmatizer

チャンキング

データを小さなチャンクに分割することを意味するチャンクは、自然言語処理で、音声の一部や名詞句などの短い句を識別するための重要なプロセスの1つです。 チャンキングとは、トークンのラベル付けを行うことです。 チャンクプロセスを使用して、文の構造を取得できます。

この例では、NLTK Pythonモジュールを使用して名詞句のチャンクを実装します。 NPチャンキングは、文の中の名詞句チャンクを見つけるチャンキングのカテゴリです。

名詞句チャンキングを実装する手順

名詞句のチャンキングを実装するには、以下に示す手順に従う必要があります-

ステップ1-チャンク文法の定義

最初のステップでは、チャンクの文法を定義します。 それは私たちが従う必要のある規則から成ります。

ステップ2-チャンクパーサーの作成

次に、チャンクパーサーを作成します。 文法を解析し、出力を提供します。

ステップ3-出力

この最後のステップでは、出力はツリー形式で生成されます。

まず、次のようにNLTKパッケージをインポートする必要があります-

import nltk

次に、文を定義する必要があります。 ここで、DT:決定要因、VBP:動詞、JJ:形容詞、IN:前置詞、NN:名詞。

sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]

次に、正規表現の形式で文法を提供します。

grammar = "NP:{<DT>?<JJ>*<NN>}"

これで、次のコード行は、文法を解析するためのパーサーを定義します。

parser_chunking = nltk.RegexpParser(grammar)

これで、パーサーは文を解析します。

parser_chunking.parse(sentence)

次に、変数に出力を与えます。

Output = parser_chunking.parse(sentence)

次のコードの助けを借りて、以下のように出力をツリーの形で描くことができます。

output.draw()

フレーズチャンク

Bag of Word(BoW)モデルテキストの数値形式への抽出と変換

自然言語処理の有用なモデルであるBag of Word(BoW)は、基本的にテキストから特徴を抽出するために使用されます。 テキストから特徴を抽出した後、生データはMLアプリケーションで使用できないため、機械学習アルゴリズムのモデリングで使用できます。

BoWモデルの動作

最初に、モデルはドキュメント内のすべての単語から語彙を抽出します。 後で、ドキュメント用語マトリックスを使用して、モデルを構築します。 このように、BoWモデルはドキュメントを単語の袋としてのみ表し、順序または構造は破棄されます。

次の2つの文があると仮定します-

*Sentence1* -これは、Bag of Wordsモデルの例です。
*Sentence2* -Bag of Wordsモデルを使用して特徴を抽出できます。

今、これらの2つの文を検討することにより、次の14の異なる単語があります-

  • This
  • is
  • an
  • bag
  • of
  • ことば
  • モデル
  • we
  • can
  • エキス
  • 特徴
  • by
  • 使う

NLTKでBag of Wordsモデルを作成する

NLTKでBoWモデルを構築する次のPythonスクリプトを見てみましょう。

まず、次のパッケージをインポートします-

from sklearn.feature_extraction.text import CountVectorizer

次に、文のセットを定義します-

Sentences=['This is an example of Bag of Words model.', ' We can extract
   features by using Bag of Words model.']
   vector_count = CountVectorizer()
   features_text = vector_count.fit_transform(Sentences).todense()
   print(vector_count.vocabulary_)

出力

上記の2つの文に14の異なる単語があることを示しています-

{
   'this': 10, 'is': 7, 'an': 0, 'example': 4, 'of': 9,
   'bag': 1, 'words': 13, 'model': 8, 'we': 12, 'can': 3,
   'extract': 5, 'features': 6, 'by': 2, 'using':11
}

トピックモデリング:テキストデータのパターンの識別

一般に、ドキュメントはトピックにグループ化され、トピックモデリングは、特定のトピックに対応するテキスト内のパターンを識別する手法です。 つまり、トピックモデリングを使用して、特定のドキュメントセットの抽象的なテーマまたは隠された構造を明らかにします。

次のシナリオでトピックモデリングを使用できます-

テキスト分類

トピックモデリングは、各単語を個別に機能として使用するのではなく、類似の単語をグループ化するため、分類を改善できます。

レコメンダーシステム

類似性の尺度を使用して、推奨システムを構築できます。

トピックモデリングアルゴリズム

私たちは、次のアルゴリズムを使用してトピックモデリングを実装することができます-

  • Latent Dirichlet Allocation(LDA)*-トピックモデリングの実装に確率的グラフィカルモデルを使用する最も一般的なアルゴリズムの1つです。

潜在的意味解析(LDA)または潜在的意味インデキシング(LSI)-線形代数に基づいており、ドキュメント用語マトリックスでSVD(特異値分解)の概念を使用します。

  • Non-Negative Matrix Factorization(NMF)*-LDAと同様に線形代数にも基づいています。

上記のアルゴリズムには、次の要素があります-

  • トピック数:パラメータ
  • 文書-単語マトリックス:入力
  • WTM(Wordトピックマトリックス)&TDM(トピックドキュメントマトリックス):出力