【Python】第9章第2回:自然言語処理(NLTKとspaCy)
本記事では、Pythonを用いた自然言語処理(NLP)の基礎を学びます。NLTKとspaCyという代表的なライブラリを比較し、それぞれの使い方を実践例とともに解説します。
0. 記事の概要
この記事を読むメリット
- 自然言語処理の基礎を理解:言語データを扱う方法がわかります。
- NLTKとspaCyの使い分けを習得:適切なライブラリ選択が可能になります。
- 実践スキルの向上:簡単なテキスト解析やトークン化を体験できます。
この記事で学べること
- 自然言語処理の基本概念と応用例
- NLTKとspaCyの基本的な使い方
- テキストデータの前処理と解析の方法
1. 自然言語処理とは?
1.1 自然言語処理の定義
自然言語処理(NLP)は、コンピュータを使って人間の言語を理解・生成・解析する技術です。主な応用例として以下があります。
- 機械翻訳: Google翻訳やDeepL。
- 音声認識: SiriやGoogleアシスタント。
- 感情分析: 顧客レビューのポジティブ/ネガティブ判定。
1.2 NLPのプロセス
自然言語処理は以下のプロセスで進められます。
- トークン化: テキストを単語や文に分割。
- 品詞タグ付け: 各単語の品詞を識別。
- 依存解析: 文法構造を解析。
2. NLTKとspaCyの比較
2.1 NLTKの特徴
NLTKは、教育目的に設計されたライブラリで、以下の特徴があります。
- 豊富なデータセットとツール。
- 初心者に優しい設計。
- 柔軟性が高いが、処理速度が遅い場合も。
2.2 spaCyの特徴
spaCyは、実務向けに最適化されたライブラリで、以下の特徴があります。
- 高速な処理速度。
- 事前学習済みのモデルを搭載。
- NER(固有表現抽出)に強み。
2.3 コード例で比較
# NLTKの例
import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenize
text = "Python is a powerful programming language."
tokens = word_tokenize(text)
print(tokens)
# spaCyの例
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Python is a powerful programming language.")
tokens = [token.text for token in doc]
print(tokens)
動作解説
- NLTK: punktトークナイザーを使い、単語を分割。
- spaCy: 事前学習モデルを利用して、高速に単語を分割。
3. 実践例:感情分析
3.1 簡単な感情分析コード
# spaCyを用いた感情分析(サンプル)
from textblob import TextBlob
text = "I love Python programming!"
blob = TextBlob(text)
print(blob.sentiment)
動作解説
- TextBlob: 感情分析や文法チェックを提供するライブラリ。
- sentiment: ポジティブ・ネガティブ度合いを数値で取得。
4. 練習問題
以下の課題に挑戦してみましょう。
- NLTKを使って、文ごとに分割するスクリプトを作成してください。
- spaCyを使って、文章から固有名詞を抽出してください。
- TextBlobを使って、顧客レビューの感情分析を行ってください。
5. 練習問題の解答と解説
問2の解答例
# spaCyで固有名詞を抽出
doc = nlp("Google was founded in September 1998 by Larry Page and Sergey Brin.")
entities = [(ent.text, ent.label_) for ent in doc.ents]
print(entities)
6. まとめ
本記事では、自然言語処理の基礎とNLTK、spaCyの使い方を学びました。自然言語処理の技術を活用して、テキストデータを解析・活用するスキルを磨いていきましょう。