【Python学習】【自然言語処理編 第1回】 テキストトークン化 (Text Tokenization)

Pythonの自然言語処理を学ぶシリーズ

第1回:テキストトークン化 (Text Tokenization)


テキストトークン化(Text Tokenization)は、テキストデータを個々のトークン(単語、句読点、記号など)に分割するプロセスです。

Pythonでテキストトークン化を行うためのライブラリとして、NLTK(Natural Language Toolkit)やspaCyがよく使用されます。

以下では、これらのライブラリを使用したテキストトークン化の解説、サンプルコード、および例題を提供します。


NLTKを使用したテキストトークン化


NLTKを使用してテキストをトークン化する手順は次の通りです。

1) NLTKをインストール:

!pip install nltk

2) NLTKのトークン化機能をインポート:

import nltk
from nltk.tokenize import word_tokenize, sent_tokenize

# NLTKのデータをダウンロード
nltk.download('punkt')

3) テキストトークン化の実行:

# テキストデータ
text = "NLTK is a leading platform for building Python programs to work with human language data."

# 単語トークン化
word_tokens = word_tokenize(text)
print("単語トークン化:")
print(word_tokens)

# 文トークン化
sent_tokens = sent_tokenize(text)
print("\n文トークン化:")
print(sent_tokens)

【説明】
このサンプルコードでは、NLTKを使用してテキストを単語と文にトークン化しています。word_tokenize関数はテキストを単語単位でトークン化し、sent_tokenize関数はテキストを文単位でトークン化します。


spaCyを使用したテキストトークン化


spaCyは高速で効率的なNLPライブラリで、テキストトークン化を簡単に行うことができます。

1) spaCyをインストール:

!pip install spacy

2) spaCyのモデルをダウンロード:

!python -m spacy download en_core_web_sm

3) spaCyを使用したテキストトークン化の実行:

import spacy

# spaCyモデルの読み込み
nlp = spacy.load("en_core_web_sm")

# テキストデータ
text = "spaCy is a popular library for natural language processing in Python."

# ドキュメントオブジェクトの作成
doc = nlp(text)

# 単語トークン化
word_tokens = [token.text for token in doc]
print("単語トークン化:")
print(word_tokens)

このサンプルコードでは、spaCyを使用してテキストを単語単位でトークン化しています。spaCyは高度なNLPタスクにも適しており、テキストトークン化だけでなく、固有表現抽出や依存構造の解析なども行えます。


例題

テキストトークン化を使用して、与えられたテキストを単語と文に分割し、各トークンの数を数えるプログラムを作成してみましょう。

以下はコード例です:

import nltk
from nltk.tokenize import word_tokenize, sent_tokenize

nltk.download('punkt')

text = "NLP is a fascinating field. It involves processing text data to gain insights."

# 単語トークン化
word_tokens = word_tokenize(text)
print("単語トークン化:")
print(word_tokens)
print("単語数:", len(word_tokens))

# 文トークン化
sent_tokens = sent_tokenize(text)
print("\n文トークン化:")
print(sent_tokens)
print("文数:", len(sent_tokens))

この例題では、与えられたテキストを単語と文にトークン化し、各トークンの数を数えています。このようにトークン化を行うことで、テキストデータの解析や処理が容易になります。


固有表現抽出や依存構造の解析について


固有表現抽出(Named Entity Recognition, NER)と依存構造の解析(Dependency Parsing)は、自然言語処理の重要なタスクです。

以下に、PythonのspaCyライブラリを使用してこれらのタスクを具体的な例と共に説明します。


固有表現抽出 (NER):


NERは、テキスト内の特定の情報要素(固有名詞)を識別し、それらに対応するカテゴリを割り当てるタスクです。

spaCyを使用して、テキストから固有表現を抽出する方法を示します。

import spacy

# spaCyモデルの読み込み
nlp = spacy.load("en_core_web_sm")

# テキストデータ
text = "Apple Inc. was founded by Steve Jobs in Cupertino, California."

# ドキュメントオブジェクトの作成
doc = nlp(text)

# 固有表現の抽出
for ent in doc.ents:
    print("固有表現:", ent.text, " カテゴリ:", ent.label_)

このコードは、与えられたテキストから固有表現を抽出し、それらのカテゴリ(例: 組織、人名、地名)を表示します。


依存構造の解析 (Dependency Parsing):


依存構造の解析は、文内の単語間の構文的な関係を特定するタスクで、主語と述語の関係、修飾語の特定などが含まれます。

spaCyを使用して、依存構造の解析を行う方法を示します。

import spacy

# spaCyモデルの読み込み
nlp = spacy.load("en_core_web_sm")

# テキストデータ
text = "The quick brown fox jumps over the lazy dog."

# ドキュメントオブジェクトの作成
doc = nlp(text)

# 依存構造の解析
for token in doc:
    print("単語:", token.text, " 依存関係:", token.dep_, " 親:", token.head.text)

このコードは、与えられたテキストの各単語に対して、その依存関係と親の単語を表示します。

例えば、"fox"は"jumps"に依存し、"jumps"の親は"over"です。


これらの例を通じて、spaCyを使用して固有表現抽出と依存構造の解析を行う基本的な方法を理解できるでしょう。

spaCyは高性能なNLPライブラリで、多くの自然言語処理タスクをサポートしています。

この記事が気に入ったらサポートをしてみませんか?