Python

【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. 練習問題

以下の課題に挑戦してみましょう。

  1. NLTKを使って、文ごとに分割するスクリプトを作成してください。
  2. spaCyを使って、文章から固有名詞を抽出してください。
  3. 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の使い方を学びました。自然言語処理の技術を活用して、テキストデータを解析・活用するスキルを磨いていきましょう。