PythonWebスクレイピング-テキストの処理
前の章では、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をインストールした後、プリセットテキストリポジトリをダウンロードする必要があります。ただし、テキストプリセットリポジトリをダウンロードする前に、NLTKをインポートする必要があります。import 次のようにコマンド-
mport nltk
今、次のコマンドの助けを借りてNLTKデータをダウンロードすることができます-
nltk.download()
NLTKの利用可能なすべてのパッケージのインストールには時間がかかりますが、常にすべてのパッケージをインストールすることをお勧めします。
その他の必要なパッケージのインストール
他にも次のようなPythonパッケージが必要です gensim そして pattern NLTKを使用して、テキスト分析を実行したり、自然言語処理アプリケーションを構築したりします。
gensim−多くのアプリケーションに役立つ堅牢なセマンティックモデリングライブラリ。次のコマンドでインストールできます-
pip install gensim
pattern −作成に使用 gensimパッケージは正しく機能します。次のコマンドでインストールできます-
pip install pattern
トークン化
与えられたテキストをトークンと呼ばれる小さな単位に分割するプロセスは、トークン化と呼ばれます。これらのトークンは、単語、数字、または句読点にすることができます。とも呼ばれますword segmentation。
例
NLTKモジュールは、トークン化のためのさまざまなパッケージを提供します。要件に応じて、これらのパッケージを使用できます。パッケージのいくつかはここで説明されています-
sent_tokenize package−このパッケージは、入力テキストを文に分割します。次のコマンドを使用して、このパッケージをインポートできます-
from nltk.tokenize import sent_tokenize
word_tokenize package−このパッケージは、入力テキストを単語に分割します。次のコマンドを使用して、このパッケージをインポートできます-
from nltk.tokenize import word_tokenize
WordPunctTokenizer package−このパッケージは、入力テキストと句読点を単語に分割します。次のコマンドを使用して、このパッケージをインポートできます-
from nltk.tokenize import WordPuncttokenizer
ステミング
どの言語でも、さまざまな形の単語があります。言語には、文法上の理由から多くのバリエーションが含まれています。たとえば、単語を考えてみましょうdemocracy、 democratic、および democratization。機械学習やウェブスクレイピングプロジェクトでは、これらの異なる単語が同じ基本形を持っていることを機械が理解することが重要です。したがって、テキストを分析しながら、単語の基本形を抽出することが役立つと言えます。
これは、単語の末尾を切り落とすことによって単語の基本形を抽出するヒューリスティックプロセスとして定義できるステミングによって実現できます。
NLTKモジュールは、ステミング用のさまざまなパッケージを提供します。要件に応じて、これらのパッケージを使用できます。これらのパッケージのいくつかをここで説明します-
PorterStemmer package− Porterのアルゴリズムは、基本フォームを抽出するためにこのPythonステミングパッケージによって使用されます。次のコマンドを使用して、このパッケージをインポートできます-
from nltk.stem.porter import PorterStemmer
たとえば、単語を与えた後 ‘writing’ このステマーへの入力として、出力は単語になります ‘write’ ステミング後。
LancasterStemmer package−このPythonステミングパッケージでは、ランカスターのアルゴリズムを使用して基本フォームを抽出します。次のコマンドを使用して、このパッケージをインポートできます-
from nltk.stem.lancaster import LancasterStemmer
たとえば、単語を与えた後 ‘writing’ このステマーへの入力として、出力は単語になります ‘writ’ ステミング後。
SnowballStemmer package− Snowballのアルゴリズムは、このPythonステミングパッケージで基本フォームを抽出するために使用されます。次のコマンドを使用して、このパッケージをインポートできます-
from nltk.stem.snowball import SnowballStemmer
たとえば、このステマーへの入力として「writing」という単語を指定すると、ステミング後の「write」という単語が出力されます。
Lemmatization
単語の基本形を抽出するもう1つの方法は、語彙と形態素解析を使用して語尾変化を取り除くことを目的とした語彙化です。補題後の単語の基本形は、補題と呼ばれます。
NLTKモジュールは、レンマ化のために次のパッケージを提供します-
WordNetLemmatizer package−動詞として名詞として使用されているかどうかに応じて、単語の基本形を抽出します。次のコマンドを使用して、このパッケージをインポートできます-
from nltk.stem import WordNetLemmatizer
チャンキング
データを小さなチャンクに分割することを意味するチャンキングは、自然言語処理において、品詞や名詞句などの短いフレーズを識別するための重要なプロセスの1つです。チャンキングは、トークンのラベル付けを行うことです。チャンク処理の助けを借りて、文の構造を取得できます。
例
この例では、NLTKPythonモジュールを使用して名詞句チャンクを実装します。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)モデルテキストを抽出して数値形式に変換する
自然言語処理で役立つモデルであるBagof Word(BoW)は、基本的にテキストから特徴を抽出するために使用されます。生データはMLアプリケーションでは使用できないため、テキストから特徴を抽出した後、機械学習アルゴリズムのモデリングに使用できます。
BoWモデルの動作
最初に、モデルはドキュメント内のすべての単語から語彙を抽出します。後で、ドキュメント用語マトリックスを使用して、モデルを構築します。このように、BoWモデルはドキュメントを単語のバッグとしてのみ表し、順序または構造は破棄されます。
例
次の2つの文があるとします-
Sentence1 −これはBag ofWordsモデルの例です。
Sentence2 − Bag ofWordsモデルを使用して特徴を抽出できます。
さて、これらの2つの文を考慮すると、次の14の異なる単語があります。
- This
- is
- an
- example
- bag
- of
- words
- model
- we
- can
- extract
- features
- by
- using
NLTKでBagofWordsモデルを構築する
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つです。
Latent Semantic Analysis(LDA) or Latent Semantic Indexing(LSI) −線形代数に基づいており、ドキュメント用語マトリックスでSVD(特異値分解)の概念を使用します。
Non-Negative Matrix Factorization (NMF) −LDAと同様に線形代数にも基づいています。
上記のアルゴリズムには、次の要素があります。
- トピック数:パラメーター
- ドキュメント-ワードマトリックス:入力
- WTM(単語トピックマトリックス)およびTDM(トピックドキュメントマトリックス):出力