---
title: NLP_NLTK
tags: 
author: [kokuren](https://convert.docswell.com/user/kokuren333)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE13KR2KJG.jpg?width=480
description: NLP_NLTK by kokuren
published: November 28, 24
canonical: https://convert.docswell.com/s/kokuren333/59VM1P-2024-11-28-201927
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LE13KR2KJG.jpg)

NLTK
Tokenization
Sentence Tokenization
Stemming
Word Tokenization
Porter Stemmer
Lancaster Stemmer
Lemmatization
Snowball Stemmer
WordNet Lemmatizer
POS Tagging
Tagset
Universal POS Tags
Parsing
Dependency Parsing
Corpus
Constituency Parsing
Brown Corpus
Gutenberg Corpus
Stopwords
Reuters Corpus
WordNet
Synsets
Hypernyms
Collocations
Hyponyms
Bigram
Chunking
Named Entity Recognition
Trigram
NLTK (Natural Language Toolkit)
定義や意味
NLTK (Natural Language Toolkit) は、自然言語処理 (NLP) に関連する研究、開発、教
育を支援するためのPythonライブラリ
テキスト処理、トークン化、タグ付け、解析、分類、文法のチェックなど、多くの自
然言語処理タスクを容易にするツールとリソースを提供
大量の言語コーパスや辞書データも含まれており、テキストデータの操作や分析をサ
ポート
嚙み砕いた説明
NLTKは、コンピュータが人間の言語を理解するために役立つツールセット
例えば、文章を単語に分けたり、各単語がどのような品詞であるかを判別したり、文
章の意味を解析したりすることができる
大学の研究室や企業のR&amp;D部門で、自然言語のテキストを扱う際に非常に役立つ
実際の応用例
NLTKを用いたトークン化（文章を単語や文に分割するプロセス）の例


# Page. 2

![Page Image](https://bcdn.docswell.com/page/GEWPD1RPJ2.jpg)

import nltk
from nltk.tokenize import word_tokenize, sent_tokenize
# サンプルのテキスト
text = &quot;NLTK is a leading platform for building Python programs to work with human langu
# 文のトークン化
sentences = sent_tokenize(text)
print(&quot;Sentences:&quot;, sentences)
# 単語のトークン化
words = word_tokenize(text)
print(&quot;Words:&quot;, words)
上記のコードでは、 sent_tokenize 関数を用いてテキストを文単位に分割
し、 word_tokenize 関数を用いて文を単語単位に分割している
実際の自然言語処理タスクでは、これらのトークン化処理を基にさらなる解析や機械
学習モデルの入力として利用する
Tokenization
定義や意味
トークン化（Tokenization）は、テキストデータを意味のある単位（トークン）に分
割するプロセスを指す
トークンは単語、句、文、またはその他のテキスト要素を表し、自然言語処理
（NLP）の前処理ステップとして使用されることが多い
トークン化の目的は、テキストを構造化しやすくし、解析や処理を行いやすくするこ
と
数式による具体例として、テキスト T をトークン化する操作を関数 tokenize(T ) と
表すと、トークン化後の出力はリスト {w1 , w2 , … , wn } で表される
​
​
​
嚙み砕いた説明
トークン化とは、文章を小さな部品にばらばらにすること
例えば、「今日はいい天気です。」という文章を単語ごとに分割すると、「今日」
「は」「いい」「天気」「です」といった具合になる


# Page. 3

![Page Image](https://bcdn.docswell.com/page/47ZKGPR673.jpg)

トークン化することで、コンピュータがその文章を理解しやすくなる
実際の応用例
トークン化は、検索エンジンのインデックス作成、テキスト解析、感情分析など、多
くの場面で応用される
Pythonの自然言語処理ライブラリであるNLTKを使用してトークン化を行う例を以下
に示す
import nltk
from nltk.tokenize import word_tokenize
# サンプルのテキスト
text = &quot;今日はいい天気です。&quot;
# NLTKを用いてトークン化
tokens = word_tokenize(text)
print(tokens)
# 出力: [&#039;今日&#039;, &#039;は&#039;, &#039;いい&#039;, &#039;天気&#039;, &#039;です&#039;, &#039;。&#039;]
NLTKの word_tokenize 関数を使用することで、日本語や英語のテキストを簡単にトー
クン化することが可能
トークン化されたデータは、後続の自然言語処理タスク（例えば、品詞タグ付けや構
文解析）で使用される
Stemming
定義や意味
ステミングは、単語の派生形をその語幹（stem）に変換するプロセス
目的は単語の変形を一つの表現に統一することにより、データの簡素化を図ること
一般的には自然言語処理（NLP）の分野で、テキストの前処理として使用される
例として、&quot;running&quot;, &quot;runs&quot;, &quot;ran&quot; という単語を &quot;run&quot; という共通の形に変換する
ステミングアルゴリズムには、Porter Stemmer、Snowball Stemmer、Lancaster
Stemmerなどがある


# Page. 4

![Page Image](https://bcdn.docswell.com/page/YJ6QYMRLJV.jpg)

嚙み砕いた説明
ステミングは、異なる形を持つ単語を同じ「ルート」や「基本形」に変換するプロセ
ス
これにより、異なる形の単語を持つ文章でも、同一のテーマや意味を持つ単語として
扱うことができる
例えば、「走る」という動作を表す単語が文章中に &quot;running&quot;, &quot;ran&quot;, &quot;runs&quot; などと異
なる形で出現しても、ステミングによってすべて &quot;run&quot; に変換される
実際の応用例
ステミングは検索エンジンや情報検索システムで、ユーザーの検索クエリを標準化
し、より多くの関連情報を引き出すために使われる
テキストマイニングや自然言語処理において、単語の出現頻度を数える際に使用され
る
以下はNLTKを用いたステミングの例
import nltk
from nltk.stem import PorterStemmer
# Porter Stemmerのインスタンスを生成
stemmer = PorterStemmer()
# ステミングを行う単語のリスト
words = [&quot;running&quot;, &quot;ran&quot;, &quot;runs&quot;, &quot;easily&quot;, &quot;fairly&quot;]
# 各単語に対してステミングを適用
stemmed_words = [stemmer.stem(word) for word in words]
print(stemmed_words)
# 出力: [&#039;run&#039;, &#039;ran&#039;, &#039;run&#039;, &#039;easili&#039;, &#039;fairli&#039;]
上記の例では、NLTKのPorterStemmerを使用して、単語のリストにステミングを適用
している
&quot;running&quot; と &quot;runs&quot; は &quot;run&quot; に変換されていることが確認できる
一方で &quot;ran&quot; はそのままであり、ステミングが完璧ではないことも示されている


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GJ5RGZ8M74.jpg)

Lemmatization
定義や意味
Lemmatization（レマタイゼーション）は自然言語処理の一環で、単語の変化形をそ
の基本形（lemma）に変換するプロセスを指す。例えば、「running」「ran」
「runs」はすべて「run」という基本形に変換される。
基本形とは、辞書に載っている原形であり、文法的な変化（時制、複数形、性など）
を除去した形を指す。Lemmatizationはこの基本形を求めるプロセスである。
Lemmatizationはステミング（stemming）と似ているが、より多くの言語的情報を利
用して正確な基本形を求める。
嚙み砕いた説明
Lemmatizationは、言葉をその「元の形」に戻す作業。例として、英語の「猫たち
（cats）」を「猫（cat）」に、「行っている（going）」を「行く（go）」にするこ
とが挙げられる。
ステミングとは異なり、Lemmatizationは文法的な情報を考慮して、より正確な形を
提供する。例えば、「better」を「good」に変換できるのはLemmatizationの特徴であ
る。
実際の応用例
自然言語処理(NLP)におけるテキストの前処理段階で使用される。特に、単語の頻度
分析や感情分析、情報検索などにおいて、単語の基本形に統一することで、より正確
な解析が可能になる。
NLTK（Natural Language Toolkit）は、Pythonで自然言語処理を行うためのライブラ
リで、Lemmatizationをサポートしている。
以下に、NLTKを用いたLemmatizationの具体例を示す。


# Page. 6

![Page Image](https://bcdn.docswell.com/page/9E2DYRKRER.jpg)

import nltk
from nltk.stem import WordNetLemmatizer
# WordNetLemmatizerのインスタンスを作成
lemmatizer = WordNetLemmatizer()
# 基本形に変換したい単語のリスト
words = [&#039;running&#039;, &#039;ran&#039;, &#039;runs&#039;, &#039;better&#039;, &#039;cats&#039;]
# 各単語を基本形に変換
lemmatized_words = [lemmatizer.lemmatize(word, pos=&#039;v&#039;) for word in words]
print(lemmatized_words)
このコードスニペットでは、NLTKのWordNetLemmatizerを使用して、動詞として認識され
る単語の基本形に変換している。出力は [&#039;run&#039;, &#039;run&#039;, &#039;run&#039;, &#039;better&#039;, &#039;cats&#039;] となる
が、&quot;better&quot; のような形容詞を処理する際には異なるPOSタグを指定する必要がある。
POS Tagging
定義や意味
POS Tagging（Part-Of-Speech Tagging）とは、文章中の各単語に対して、その品詞
（名詞、動詞、形容詞など）を付与するプロセスのことを指す。自然言語処理
（NLP）の基本的なタスクの一つであり、文の構文解析や意味解析の基礎となる。
数式で表現すると、与えられた単語列 W = (w1 , w2 , … , wn ) に対して、対応する
品詞列 T = (t1 , t2 , … , tn ) を求める問題とされる。ここで、各 ti は単語 wi に対応
​
​
​
​
​
​
​
​
する品詞タグである。
嚙み砕いた説明
POS Taggingとは、文章中の各単語に「これは名詞」「これは動詞」といったラベル
をつける作業のこと。例えば、「猫が魚を食べる」という文章では、「猫」は名詞、
「食べる」は動詞といった具合に分類する。
これにより、コンピュータは文章の構造を理解しやすくなり、自然な言語を処理する
際の精度が向上する。


# Page. 7

![Page Image](https://bcdn.docswell.com/page/D7Y2GDN57M.jpg)

実際の応用例
POS Taggingは、文章生成、機械翻訳、音声認識など、多くの自然言語処理タスクに
おいて重要な役割を果たす。
Pythonの自然言語処理ライブラリであるNLTKを用いたPOS Taggingの実例を以下に
示す。
import nltk
from nltk import pos_tag
from nltk.tokenize import word_tokenize
# NLTKのデータセットをダウンロード（初回のみ必要）
nltk.download(&#039;punkt&#039;)
nltk.download(&#039;averaged_perceptron_tagger&#039;)
# サンプルの文章
sentence = &quot;The cat sits on the mat.&quot;
# 単語に分割
words = word_tokenize(sentence)
# 各単語に品詞をタグ付け
tagged_words = pos_tag(words)
# 結果を表示
print(tagged_words)
# 出力: [(&#039;The&#039;, &#039;DT&#039;), (&#039;cat&#039;, &#039;NN&#039;), (&#039;sits&#039;, &#039;VBZ&#039;), (&#039;on&#039;, &#039;IN&#039;), (&#039;the&#039;, &#039;DT&#039;), (&#039;m
上記のコードでは、NLTKの word_tokenize 関数を用いて文章を単語に分割
し、 pos_tag 関数を用いてそれぞれの単語に品詞タグを付与している。出力は各単語
に対応する品詞タグのペアのリストとなる。例えば、&#039;NN&#039;は名詞を表し、&#039;VBZ&#039;は3人
称単数現在形の動詞を表す。
Parsing
定義や意味
Parsing（構文解析）とは、与えられた文字列、特にプログラミング言語や自然言語
における文法を基に、その文字列を解析し、意味や構造を理解するプロセスを指す


# Page. 8

![Page Image](https://bcdn.docswell.com/page/VEN8G6X4J8.jpg)

構文解析器（パーサー）は、文法規則を用いて入力文字列を解析し、構文木（parse
tree）や抽象構文木（abstract syntax tree, AST）を生成する
文法は通常、Backus-Naur Form（BNF）や拡張BNFで表現されることが多い
嚙み砕いた説明
Parsingは、文章やコードを小さな要素に分解し、それぞれの役割や関係を理解する
作業
例えば、英語の文「The cat sat on the mat」を解析すると、「The」が冠詞、「cat」
が名詞、「sat」が動詞というように各単語の役割を理解することになる
プログラムコードでも同様に、構文解析を通じて変数、演算子、関数などの役割を特
定する
実際の応用例
Parsingはプログラミング言語のコンパイラやインタプリタで使用される。ソースコ
ードを解析し、コンピュータが実行可能な形式に変換する
自然言語処理（NLP）においても、Parsingはテキストデータの意味を理解するための
重要なステップとなる
PythonのNLTKライブラリを使用して自然言語を解析する例を以下に示す


# Page. 9

![Page Image](https://bcdn.docswell.com/page/Y79KWL8473.jpg)

import nltk
from nltk import CFG
# 文法定義
grammar = CFG.fromstring(&quot;&quot;&quot;
S -&gt; NP VP
NP -&gt; DT N
VP -&gt; V NP
DT -&gt; &#039;the&#039;
N -&gt; &#039;cat&#039; | &#039;mat&#039;
V -&gt; &#039;sat&#039; | &#039;saw&#039;
&quot;&quot;&quot;)
# パーサーの初期化
parser = nltk.ChartParser(grammar)
# 解析する文
sentence = &quot;the cat sat on the mat&quot;.split()
# 構文解析
for tree in parser.parse(sentence):
print(tree)
上記のコードでは、NLTKの CFG （Context Free Grammar）を用いて文法を定義
し、 ChartParser を使用して与えられた文を解析
結果として、構文木が生成され、文の構造が視覚化される
Corpus
定義や意味
コーパス（Corpus）とは、言語学や自然言語処理において、テキストデータの集合を
指す。これらのデータセットは、分析やモデルの学習に利用される。
コーパスは、特定の言語や言語の一部、または特定の用途（例えば、医学文献や新聞
記事）に特化したものが作成される。
数式的に表現すると、コーパスはテキストの集合として {T1 , T2 , … , Tn } で表さ
れ、各テキスト Ti は単語や文の列として構成される。
​
​
​
​


# Page. 10

![Page Image](https://bcdn.docswell.com/page/G78RNX8VED.jpg)

嚙み砕いた説明
コーパスとは、たくさんのテキストを集めたもの。例えば、英語の新聞記事を集めた
データや、日本語の小説を集めたデータなどがある。これらは言語の特徴を分析した
り、AIに言語を学習させたりするのに使われる。
言語を勉強するための大きなテキストの本棚のようなものと考えればわかりやすい。
実際の応用例
コーパスは自然言語処理（NLP）において、モデルをトレーニングするための重要な
データセットとして広く利用されている。
NLTK（Natural Language Toolkit）は、Pythonで自然言語処理を行うためのライブラ
リであり、いくつかの標準的なコーパスを簡単に使うことができる。
以下にNLTKを用いてコーパスを利用する例を示す。
import nltk
from nltk.corpus import gutenberg
# グーテンベルクプロジェクトのコーパスからテキストを取得
nltk.download(&#039;gutenberg&#039;)
sample_text = gutenberg.raw(&#039;austen-emma.txt&#039;)
# 取得したテキストの最初の1000文字を表示
print(sample_text[:1000])
# 単語の頻度を計算
from nltk.tokenize import word_tokenize
from nltk.probability import FreqDist
nltk.download(&#039;punkt&#039;)
tokens = word_tokenize(sample_text)
freq_dist = FreqDist(tokens)
# 最も一般的な10個の単語を表示
print(freq_dist.most_common(10))
このコードは、NLTKのグーテンベルクコーパスから「エマ」という作品を取得し、
そのテキストの一部を表示し、頻度分布を計算する例。これにより、テキスト内でど
の単語がよく使われているかを分析できる。


# Page. 11

![Page Image](https://bcdn.docswell.com/page/L7LKP8RRER.jpg)

Stopwords
定義や意味
Stopwordsとは、自然言語処理において一般的に頻出し、情報的価値が低いとされる
単語のこと。これらの単語は、テキストマイニングや情報検索の際に無視されること
が多い。
例として、英語の &quot;the&quot;, &quot;is&quot;, &quot;in&quot;, &quot;and&quot; などがStopwordsに該当する。
これらの単語は、文書の意味を理解する上で必須ではないため、効率的なテキスト処
理のために除去されることが多い。
嚙み砕いた説明
Stopwordsは、文章中に頻繁に登場するが、それ自体ではあまり役に立たない単語の
ことを指す。例えば、英語の &quot;the&quot; や &quot;is&quot; は多くの文章で使われるが、これらを取り
除いても文章の主旨は大きく変わらない。
自然言語処理の中で、Stopwordsを取り除くことで、より重要な単語に集中すること
ができる。これにより、文章の内容を効率よく解析することが可能になる。
実際の応用例
Stopwordsの除去は、情報検索やテキスト解析、機械学習の前処理において重要なス
テップである。これにより、分析の精度を高め、処理速度を向上させることができ
る。
Pythonの自然言語処理ライブラリであるNLTKを用いて、Stopwordsを除去する例を以
下に示す。


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4EM246RPEW.jpg)

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
# NLTKのStopwordsリストをダウンロード
nltk.download(&#039;stopwords&#039;)
nltk.download(&#039;punkt&#039;)
# サンプルテキスト
text = &quot;This is a simple example to demonstrate the removal of stopwords.&quot;
# 単語に分割
words = word_tokenize(text)
# 英語のStopwordsリストを取得
stop_words = set(stopwords.words(&#039;english&#039;))
# Stopwordsを除去
filtered_words = [word for word in words if word.lower() not in stop_words]
print(&quot;Original Text: &quot;, words)
print(&quot;Filtered Text: &quot;, filtered_words)
上記のコードでは、NLTKを用いて英語のStopwordsを除去している。まず、テキスト
を単語に分割し、次にNLTKのStopwordsリストを使ってそれらを除去している。結果
として、重要な単語のみがリストに残る。
WordNet
定義や意味
WordNetとは、英語の語彙を体系的に整理した大規模な辞書データベースで、語と語
の間の意味的関係を表現するために設計されたもの。主に、同義語、反義語、上位
語、下位語などの関係を持つ語群（シノセット: Synset）を基に構成される。
各シノセットは、概念的に似た意味を持つ単語の集合であり、これらの集合は意味的
に階層構造を形成する。
WordNetを使うことで、語の意味的な類似性を計算したり、テキストの意味解析を行
うことが可能。


# Page. 13

![Page Image](https://bcdn.docswell.com/page/PERMWPRY79.jpg)

嚙み砕いた説明
WordNetは、言葉の意味を理解するためのデータベースのようなもので、言葉同士の
関係を整理している。例えば、「犬」という単語は「動物」の一種であり、「ペッ
ト」でもある、というような関係性を表している。
これにより、プログラムは「犬」と「猫」のような言葉がどの程度似ているかを理解
できるようになり、自然言語処理の精度を高めることができる。
実際の応用例
WordNetは自然言語処理（NLP）において、テキスト解析や意味的な類似性の計算、
情報検索、機械翻訳などに応用される。
PythonのNLTKライブラリを利用して、WordNetを用いた単語の類似性を計算するコ
ードスニペットを以下に示す。
from nltk.corpus import wordnet as wn
# &#039;dog&#039;という単語のシノセットを取得
dog_synsets = wn.synsets(&#039;dog&#039;)
# 最初のシノセットの定義を表示
print(dog_synsets[0].definition())
# &#039;dog&#039;と&#039;subwoofer&#039;の類似度を計算
dog = wn.synset(&#039;dog.n.01&#039;)
subwoofer = wn.synset(&#039;subwoofer.n.01&#039;)
similarity = dog.wup_similarity(subwoofer)
print(f&quot;Similarity between &#039;dog&#039; and &#039;subwoofer&#039;: {similarity}&quot;)
このコードは、まず「dog」という単語のシノセットを取得し、その定義を表示す
る。次に、「dog」と「subwoofer」の類似度を計算して結果を表示する。
WordNetを用いることで、単語の意味的な関係性を定量化し、さまざまなNLPタスク
で利用可能。


# Page. 14

![Page Image](https://bcdn.docswell.com/page/P7XVP3R4JX.jpg)

Collocations
定義や意味
コロケーション（Collocations）とは、特定の言葉が他の言葉と一緒に使われる頻度
が高いことを指す。言語処理の分野では、特に2つ以上の単語が一緒に現れるパター
ンとして認識される。
コロケーションは、自然言語処理（NLP）で重要な役割を果たし、テキストデータか
ら重要な情報を抽出する際に役立つ。
数式的には、2つの単語 w1 と w2 のコロケーションは、一緒に出現する確率
​
​
P (w1 , w2 ) として表され、次のように計算される：
​
​
P (w1 , w2 ) =
​
​
count(w1 , w2 )
N
​
​
​
ここで、count(w1 , w2 ) は2つの単語が一緒に出現する頻度、N は全体の単語ペアの数を示
​
​
す。
嚙み砕いた説明
コロケーションは、ある単語が他の特定の単語と一緒に出現することが多い組み合わ
せのことを指す。例えば、「強い雨」という表現は自然に感じられるが、「強い日」
はそうではない。
言語の自然な表現や意味の理解を助けるために使われ、特にテキストの分析におい
て、どの単語がどのような文脈で用いられやすいかを判断するために重要。
例えば、「make a decision」や「heavy rain」のように、特定の単語の組み合わせが
自然に使われることを示す。
実際の応用例
コロケーションの概念は、検索エンジンの最適化、機械翻訳、テキスト要約など幅広
い応用がある。
NLTK（Natural Language Toolkit）を用いて、テキストデータからコロケーションを
抽出することができる。
以下のコードスニペットは、NLTKを用いてテキストからビグラム（2つの単語の組み
合わせ）を抽出し、その中でも特に頻繁に現れるものをコロケーションとして取り出
す例：


# Page. 15

![Page Image](https://bcdn.docswell.com/page/37KQDYRP7D.jpg)

import nltk
from nltk.collocations import BigramCollocationFinder
from nltk.metrics import BigramAssocMeasures
# テキストデータをトークン化
text = &quot;This is a simple text with some sample text to demonstrate collocations.&quot;
tokens = nltk.word_tokenize(text)
# ビグラムコロケーションファインダーを作成
bigram_finder = BigramCollocationFinder.from_words(tokens)
# 点互情報量（PMI）を用いて上位のコロケーションを抽出
bigram_measures = BigramAssocMeasures()
top_collocations = bigram_finder.nbest(bigram_measures.pmi, 5)
print(top_collocations)
# [(&#039;simple&#039;, &#039;text&#039;), (&#039;sample&#039;, &#039;text&#039;), ...]
このコードでは、与えられたテキストからビグラムを抽出し、点互情報量（PMI:
Pointwise Mutual Information）を基に上位のコロケーションを取り出している。
Chunking
定義や意味
チャンキング（Chunking）は、自然言語処理においてテキストをより大きな単位にグ
ループ化する手法を指す。具体的には、単語の列を塊（チャンク）としてまとめ、文
法的な構造を認識しやすくする。
チャンクは通常、名詞句（NP）、動詞句（VP）、形容詞句（ADJP）などの部分的な
文法単位として定義される。これにより、文の全体構造を解析する前に、部分的な構
造を把握することができる。
チャンキングのプロセスは、通常、トークン化や品詞タグ付けを経たテキストに対し
て適用され、各単語に品詞タグを基にしたパターンマッチングを行うことで、チャン
クを抽出する。
嚙み砕いた説明
チャンキングは、文章を「意味のまとまり」に分ける技術であり、例えば「The quick
brown fox」では「The」「quick」「brown」「fox」が名詞句として一つの塊にまと
められる。これは、単語がどのように結びついているかを理解するのに役立つ。


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LJ3PR98475.jpg)

文章を理解する際に、単語ごとに見るのではなく、まとまりとして見ることで、意味
をより簡単に構築することができる。
実際の応用例
チャンキングは、自然言語処理のタスクで多く活用され、情報抽出や名前付きエンテ
ィティ認識（NER）、機械翻訳などで重要な役割を果たす。
PythonのNLTKライブラリを使用して、簡単なチャンキングを実行する例を以下に示
す。
import nltk
from nltk import pos_tag
from nltk.chunk import RegexpParser
# サンプルテキスト
text = &quot;The quick brown fox jumps over the lazy dog&quot;
# トークン化
tokens = nltk.word_tokenize(text)
# 品詞タグ付け
tagged = pos_tag(tokens)
# チャンクングルールの定義
pattern = &quot;&quot;&quot;
NP: {&lt;DT&gt;?&lt;JJ&gt;*&lt;NN&gt;}
# 名詞句の定義
&quot;&quot;&quot;
# チャンカーパサーの作成
chunk_parser = RegexpParser(pattern)
# チャンキングの実行
chunked = chunk_parser.parse(tagged)
# 結果を表示
print(chunked)
このコードは、文章をトークン化し、品詞タグを付けた上で、名詞句（NP）を抽出するため
のチャンキングを行う。 RegexpParser を用いて、正規表現によるパターンマッチングでチャ
ンクを抽出している。


# Page. 17

![Page Image](https://bcdn.docswell.com/page/8JDLYGM57G.jpg)

Named Entity Recognition (NER)
定義や意味
Named Entity Recognition（NER）は、自然言語処理（NLP）のタスクの一つであ
り、テキストから特定の固有名詞（人名、地名、組織名など）を識別し、分類する技
術
NERは情報抽出や関係抽出の前段階として重要な役割を果たす
多くのNERシステムは、文脈を理解し、単語の意味を推定するために機械学習アルゴ
リズムを用いる
嚙み砕いた説明
NERは、テキストの中から特定の名前や場所を見つけ出し、それを「これは人名」
「これは場所」といったカテゴリに分ける技術
例えば、「東京に住んでいる佐藤さんはNTTで働いている」という文から、「東京」
を地名、「佐藤さん」を人名、「NTT」を組織名として識別する
手作業でこれを行うのは大変なため、コンピュータが自動で行う
実際の応用例
NERは、多くのアプリケーションで使用され、例えば、ニュース記事から重要な名前
を抽出したり、検索エンジンで特定のエンティティを特定したりすることがある
以下はPythonのNLTKライブラリを使用してNERを実装する簡単な例


# Page. 18

![Page Image](https://bcdn.docswell.com/page/VEP263RDE8.jpg)

import nltk
from nltk import word_tokenize, pos_tag, ne_chunk
# テキストを用意する
text = &quot;Barack Obama was born in Honolulu, Hawaii.&quot;
# トークン化（単語分割）
tokens = word_tokenize(text)
# 品詞タグ付け
tagged = pos_tag(tokens)
# 固有表現抽出
entities = ne_chunk(tagged)
# 結果を表示
print(entities)
上記のコードは、NLTKライブラリを使用して、文章中の固有表現を認識する例
ne_chunk 関数がNERを実行し、結果として抽出された固有名詞を表示する
このコードは、文章中の「Barack Obama」を人名、「Honolulu」と「Hawaii」を地
名として識別する
Sentence Tokenization
定義や意味
Sentence Tokenizationとは、テキストを文単位で分割するプロセスを指す。自然言語
処理（NLP）の基本的なステップの一つであり、テキストデータを分析可能な単位に
分解するために使用される。
具体的には、入力されたテキストデータを文ごとに切り分け、その文をそれぞれの要
素としてリストや配列に格納する手法。
数式で表すと、テキストデータを T 、文に分割されたリストを S としたとき、S =
Tokenize(T ) という形式で表現できる。
嚙み砕いた説明
Sentence Tokenizationは、文章を「文」の単位で分けることを意味する。たとえば、
「私は猫が好きです。あなたは犬が好きですか？」という文章を文単位で分割する


# Page. 19

![Page Image](https://bcdn.docswell.com/page/27VD34RG7Q.jpg)

と、「私は猫が好きです。」と「あなたは犬が好きですか？」の2つの文に分けられ
る。
文を分ける際には、句読点や改行、文末のマーク（例えば「.」、「!」、「?」など）
を基にして分割を行う。
実際の応用例
Sentence Tokenizationは、テキストデータの前処理として様々な自然言語処理タスク
で使用される。例えば、感情分析、文章分類、機械翻訳などにおいて、文単位の処理
が必要となる。
Pythonの自然言語処理ライブラリであるNLTKを使用した例を以下に示す。
import nltk
from nltk.tokenize import sent_tokenize
# NLTKのデータセットをダウンロード
nltk.download(&#039;punkt&#039;)
# サンプルテキスト
text = &quot;私は猫が好きです。あなたは犬が好きですか？&quot;
# 文単位でテキストを分割
sentences = sent_tokenize(text, language=&quot;japanese&quot;)
# 結果を表示
print(sentences)
# 出力: [&#039;私は猫が好きです。&#039;, &#039;あなたは犬が好きですか？&#039;]
上記のコードでは、NLTKライブラリの sent_tokenize 関数を利用して、日本語のテキ
ストを文単位で分割している。このようにして得られた文リストは、その後の自然言
語処理において解析や分析の単位として利用される。
Word Tokenization
定義や意味
Word Tokenizationは、テキストを単語単位で分割するプロセスを指す。これは自然言
語処理（NLP）の基本的なステップであり、テキストデータを解析可能な形に変換す
るための前処理として行われる。具体的には、文章や段落を個々の単語に分割し、リ
ストまたは他のデータ構造として扱う


# Page. 20

![Page Image](https://bcdn.docswell.com/page/5JGY316DJL.jpg)

数式的には、与えられたテキスト T を単語の集合 {w1 , w2 , … , wn } に変換する操
作として表現できる。このとき、T は文字列であり、各 wi はトークン化された単語
を表す
​
​
​
​
嚙み砕いた説明
Word Tokenizationとは、文章をその構成要素である単語に分けることを意味する。た
とえば、「私は猫を飼っています。」という文章を「私」、「は」、「猫」、
「を」、「飼って」、「います」といった単語に分ける作業
これは言語処理の最初のステップであり、文章をより細かい単位に分解することで、
機械が文章を理解しやすくするための前処理
実際の応用例
Word Tokenizationは、テキスト解析、機械翻訳、感情分析など様々なNLPアプリケー
ションで使用される
PythonのNLTKライブラリを使用すると、簡単にWord Tokenizationを実行することが
できる
以下にPythonを用いた具体例を示す：
# NLTKライブラリをインポート
import nltk
from nltk.tokenize import word_tokenize
# テキストデータの例
text = &quot;NLTK is a leading platform for building Python programs to work with human langu
# NLTKのword_tokenize関数を使用してトークン化
tokens = word_tokenize(text)
# 結果を表示
print(tokens)
このコードでは、NLTKの word_tokenize 関数を使用して文字列を単語単位に分割し、リスト
として返す。結果として、 tokens には以下のようなリストが得られる：
[&#039;NLTK&#039;, &#039;is&#039;, &#039;a&#039;, &#039;leading&#039;, &#039;platform&#039;, &#039;for&#039;, &#039;building&#039;, &#039;Python&#039;, &#039;programs&#039;, &#039;to&#039;
このようにして、テキストを解析可能な形に分割することができる。


# Page. 21

![Page Image](https://bcdn.docswell.com/page/47QM5D4XEP.jpg)

Porter Stemmer
定義や意味
Porter Stemmerは、1980年にMartin Porterによって開発されたステミングアルゴリズ
ム。ステミングとは、単語をその根幹となる形（ステム）に変換する処理のこと
ステミングは自然言語処理（NLP）において、単語の統一を行うためによく用いられ
る。例えば、&quot;running&quot;, &quot;runs&quot;, &quot;ran&quot;といった単語を&quot;run&quot;という共通の形に変換する
Porter Stemmerは英語に特化しており、辞書を用いずに一連のルールに基づいて単語
を変形する
嚙み砕いた説明
ステミングは、単語の末尾を削ったり変えたりすることで、異なる形態の単語を統一
する手法
例えば、&quot;connect&quot;, &quot;connected&quot;, &quot;connecting&quot;を全て&quot;connect&quot;に変換する。こうする
ことで、異なる形態の単語が同じ意味を持つものとして扱える
Porter Stemmerは、この変換をシンプルなルールセットに基づいて実行し、単語の意
味を大きく損なわないようにする
実際の応用例
検索エンジンなどで、ユーザーが異なる形態の単語を使っても、それらを統一して検
索結果を返すことができる
テキストデータの前処理で、単語の統一を行うことで、分析や機械学習モデルのパフ
ォーマンスを向上させる
以下は、PythonのNLTKライブラリを使用してPorter Stemmerを実装する例：


# Page. 22

![Page Image](https://bcdn.docswell.com/page/KE4V9ZQ271.jpg)

# NLTKライブラリをインポート
import nltk
from nltk.stem import PorterStemmer
# Porter Stemmerのインスタンスを作成
stemmer = PorterStemmer()
# ステミングを行う単語のリスト
words = [&quot;running&quot;, &quot;runs&quot;, &quot;ran&quot;, &quot;easily&quot;, &quot;fairly&quot;]
# 各単語に対してステミングを適用
stemmed_words = [stemmer.stem(word) for word in words]
# 結果を出力
print(stemmed_words)
# 出力: [&#039;run&#039;, &#039;run&#039;, &#039;ran&#039;, &#039;easili&#039;, &#039;fairli&#039;]
このコードスニペットでは、NLTKライブラリを使ってPorter Stemmerを適用し、単語リスト
の各単語をステミングしている。結果として、語幹が統一された単語のリストが得られる。
Lancaster Stemmer
定義や意味
Lancaster Stemmerは、英語の単語から語幹を抽出するためのステミングアルゴリズ
ムの一つ。ステミングとは、単語の接尾辞や接頭辞を取り除き、単語の基本形（語
幹）を抽出する技術。
Lancaster Stemmerは、Porter Stemmerと比べてシンプルで速度が速いが、より攻撃
的であるため、語幹の過剰な短縮が発生することがある。
例えば、&quot;running&quot; や &quot;runner&quot; のような単語は、Lancaster Stemmerによって同じ語幹
&quot;run&quot; に変換される。
嚙み砕いた説明
Lancaster Stemmerは、単語の語尾や接頭辞を削除して、単語の基本形を抽出するツ
ール。これにより、異なる形態の単語を同じ基本形に統一することができる。
例えば、&quot;running&quot;, &quot;runs&quot;, &quot;ran&quot; などの単語は、すべて &quot;run&quot; という形に変換される。
このようにして、テキストの分析や処理を行う際に、異なる形態の単語を統合して扱
うことができる。


# Page. 23

![Page Image](https://bcdn.docswell.com/page/L713KRPKEG.jpg)

実際の応用例
Lancaster Stemmerは、自然言語処理(NLP)の分野で頻繁に使用される。特に、検索エ
ンジンでのクエリ処理やテキスト分析で、単語の形態の違いを無視して情報を検索・
解析する際に有効。
以下はPythonのNLTKライブラリを用いたLancaster Stemmerの簡単な使用例。
import nltk
from nltk.stem import LancasterStemmer
# Lancaster Stemmerのインスタンスを作成
lancaster_stemmer = LancasterStemmer()
# ステミングを行う単語のリスト
words = [&quot;running&quot;, &quot;runner&quot;, &quot;ran&quot;, &quot;runs&quot;, &quot;easily&quot;, &quot;fairly&quot;]
# 各単語に対してステミングを適用
stemmed_words = [lancaster_stemmer.stem(word) for word in words]
# 結果を表示
for original, stemmed in zip(words, stemmed_words):
print(f&quot;Original: {original} -&gt; Stemmed: {stemmed}&quot;)
このコードは、指定された単語リストに対してLancaster Stemmerを適用し、語幹を
抽出する。結果として、各単語の元の形とステミング後の形が表示される。
Snowball Stemmer
定義や意味
Snowball Stemmerは、英語を含む多言語のためのステミングアルゴリズムの一種
で、Porter Stemmerの後継として開発された。ステミングとは、単語の語幹を抽出す
るための手法であり、形態素解析の一部として利用される。Snowball Stemmerは、
Porter Stemmerに比べて簡潔でありながら、より効果的に単語の語幹を抽出する。
Snowball Stemmerは、特定のルールセットに基づいて単語の接尾辞を削除すること
で動作する。例えば、単語 &quot;running&quot; に対して、接尾辞 &quot;-ing&quot; を削除して &quot;run&quot; という
語幹を抽出する。


# Page. 24

![Page Image](https://bcdn.docswell.com/page/G7WPD12PE2.jpg)

嚙み砕いた説明
Snowball Stemmerは、単語をその基本形（語幹）に戻すためのツール。たとえば、
「走る」という英単語の変化形には &quot;runs&quot;, &quot;running&quot;, &quot;ran&quot; などがあるが、これらを
全て &quot;run&quot; という語幹に統一する。これは、文書の分析や検索エンジンの最適化に役
立つ。
Porter Stemmerの改良版として、より多くの言語に対応し、簡潔で効率的に設計され
ているため、一般的なテキスト処理タスクに広く利用されている。
実際の応用例
Snowball Stemmerは、自然言語処理の分野で広く使用されており、特に検索エンジ
ンやテキストマイニングの分野で重要な役割を果たしている。例えば、検索クエリの
単語をステミングすることで、関連する結果をより効果的に取得できる。
Pythonの自然言語処理ライブラリであるNLTKを用いて、Snowball Stemmerを実装す
る例を以下に示す。
from nltk.stem import SnowballStemmer
# 英語のSnowball Stemmerを初期化
stemmer = SnowballStemmer(&quot;english&quot;)
# ステミングする単語のリスト
words = [&quot;running&quot;, &quot;runs&quot;, &quot;ran&quot;, &quot;easily&quot;, &quot;fairly&quot;]
# ステミングを実行し、結果を出力
stemmed_words = [stemmer.stem(word) for word in words]
print(stemmed_words)
# 出力: [&#039;run&#039;, &#039;run&#039;, &#039;ran&#039;, &#039;easili&#039;, &#039;fair&#039;]
上記のコードでは、 SnowballStemmer クラスを使用して英語のステマーを作成し、複
数の単語をステミングしている。結果として、単語がその語幹に変換されていること
が確認できる。
WordNet Lemmatizer
定義や意味
WordNet Lemmatizerは自然言語処理（NLP）において、単語をその基本形（レムマ）
に変換するためのツールの一つ


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4JZKGPD6J3.jpg)

「基本形」とは、単語の変化形（活用形、過去形、複数形など）から元の形に戻した
ものである
例えば、&quot;running&quot; や &quot;ran&quot; を &quot;run&quot; に変換する
WordNetは英語の語彙データベースであり、NLTK（Natural Language Toolkit）はこ
のデータベースを用いてLemmatizerを提供する
嚙み砕いた説明
単語の「基本形」に戻すことで、異なる形態の単語を統一し、テキストの解析を簡素
化する
例えば、文書の中で&quot;am&quot;, &quot;are&quot;, &quot;is&quot;をすべて&quot;be&quot;に変換することで、文書の内容をよ
り簡潔に解析できる
これは特に、文書の検索や分類、トピックモデリングの際に有効
実際の応用例
自然言語処理におけるテキストの前処理段階で使用される
例えば、情報検索システムやテキスト分類問題において、単語のバリエーションを減
らすために応用される
以下にPythonのNLTKを使ったWordNet Lemmatizerの使用例を示す：
import nltk
from nltk.stem import WordNetLemmatizer
# WordNetLemmatizerのインスタンスを生成
lemmatizer = WordNetLemmatizer()
# 単語のリスト
words = [&quot;running&quot;, &quot;ran&quot;, &quot;runs&quot;, &quot;easily&quot;, &quot;fairly&quot;]
# 各単語を基本形に変換
lemmatized_words = [lemmatizer.lemmatize(word, pos=&#039;v&#039;) for word in words]
print(lemmatized_words)
# 出力: [&#039;run&#039;, &#039;run&#039;, &#039;run&#039;, &#039;easily&#039;, &#039;fairly&#039;]
このコードスニペットでは、NLTKのWordNetLemmatizerを使用して、動詞の形で与えられ
た単語をその基本形に変換している。 lemmatize メソッドは、POS（品詞）タグを指定する


# Page. 26

![Page Image](https://bcdn.docswell.com/page/YE6QYM1LEV.jpg)

ことで、正確な基本形を得ることができる。ここでは動詞（&#039;v&#039;）を指定しているが、名詞や
形容詞など他の品詞も指定できる。
Tagset
定義や意味
タグセット（Tagset）は、自然言語処理において、単語に対する品詞（Part-ofSpeech, POS）をタグとして付与するために使用されるタグの集合を指す。タグセッ
トは、言語の文法的な構造を解析するための基本的なツールであり、各タグは特定の
品詞や文法的機能を表す。
例えば、英語の基本的なタグセットでは名詞を表す「NN」、動詞を表す「VB」、形
容詞を表す「JJ」などが含まれる。タグセットは解析の精度を向上させるために詳細
に設定されることが多く、言語や用途に応じてカスタマイズされることもある。
嚙み砕いた説明
タグセットとは、文章の中の単語がどのような役割（例えば名詞、動詞、形容詞な
ど）を持っているかを示すためのラベルの集まり。これにより、コンピュータは文章
を理解しやすくなり、文法的な解析や機械翻訳などに役立つ。
例えば、「The quick brown fox jumps over the lazy dog.」という文では、「The」は
限定詞、「quick」と「brown」は形容詞、「fox」は名詞、「jumps」は動詞、「over
the lazy dog」は前置詞句としてタグ付けできる。
実際の応用例
タグセットは、自然言語処理でテキストデータを解析する際に広く応用される。特
に、文章の構造を理解する必要があるタスク、例えば情報抽出、機械翻訳、感情分析
などで利用される。
自然言語ツールキット（NLTK）を使用してPythonでPOSタグ付けを行う例を示す。


# Page. 27

![Page Image](https://bcdn.docswell.com/page/GE5RGZ4MJ4.jpg)

import nltk
from nltk import pos_tag
from nltk.tokenize import word_tokenize
# サンプルテキスト
sentence = &quot;The quick brown fox jumps over the lazy dog.&quot;
# トークン化
tokens = word_tokenize(sentence)
# 品詞タグ付け
tagged = pos_tag(tokens)
# タグ付け結果の表示
print(tagged)
# 出力例: [(&#039;The&#039;, &#039;DT&#039;), (&#039;quick&#039;, &#039;JJ&#039;), (&#039;brown&#039;, &#039;JJ&#039;), (&#039;fox&#039;, &#039;NN&#039;), (&#039;jumps&#039;, &#039;VB
上記のコードでは、NLTKを使用して文章をトークンに分解し、それぞれのトークン
に対して品詞タグを付けている。タグセットはNLTKが内部で使用する標準的なもの
が用いられる。
Universal POS Tags
定義や意味
Universal POS Tagsは、自然言語処理における品詞タグ付けのための標準化されたタ
グセットである。これらのタグは、言語間での一貫性を保つことを目的としており、
多言語での解析や処理を行う際に非常に役立つ。
各タグは、名詞、動詞、形容詞などの主要な品詞カテゴリをカバーしており、具体的
には以下のようなタグが含まれる:
NOUN : 名詞
VERB : 動詞
ADJ : 形容詞
ADV : 副詞
PRON : 代名詞
DET : 限定詞
ADP : 前置詞または後置詞


# Page. 28

![Page Image](https://bcdn.docswell.com/page/972DYRVR7R.jpg)

CONJ : 接続詞
NUM : 数
PRT : 助詞
PUNCT : 句読点
SYM : 記号
X : 他に分類されないもの
嚙み砕いた説明
Universal POS Tagsは、言語に依存しない品詞タグ付けの方法で、例えば英語と日本
語の両方で「名詞」や「動詞」といった基本的な品詞を共通のタグで表すことができ
る。これにより、異なる言語を扱う際にも統一した手法で解析できる。
例えば、「犬が走る」という文において、「犬」は名詞なので NOUN タグ、「が」は
助詞なので PRT タグ、「走る」は動詞なので VERB タグが付与される。
実際の応用例
Universal POS Tagsは、自然言語処理におけるテキスト解析、形態素解析、機械翻訳
などで広く使用されている。
Pythonの自然言語処理ライブラリであるNLTKを用いて、テキストに対して品詞タグ
付けを行う具体例を以下に示す。
import nltk
from nltk import pos_tag
from nltk.tokenize import word_tokenize
# サンプルテキスト
text = &quot;The quick brown fox jumps over the lazy dog.&quot;
# トークン化
tokens = word_tokenize(text)
# 品詞タグ付け
pos_tags = pos_tag(tokens, tagset=&#039;universal&#039;)
# 結果の表示
print(pos_tags)
# 出力例: [(&#039;The&#039;, &#039;DET&#039;), (&#039;quick&#039;, &#039;ADJ&#039;), (&#039;brown&#039;, &#039;ADJ&#039;), (&#039;fox&#039;, &#039;NOUN&#039;), (&#039;jumps&#039;


# Page. 29

![Page Image](https://bcdn.docswell.com/page/DJY2GD35JM.jpg)

この例では、NLTKを使用して英文をトークン化し、それぞれの単語に対して
Universal POS Tagを付与している。
pos_tag 関数における tagset=&#039;universal&#039; というパラメータは、Universal POS Tags
を使用することを指定している。
Dependency Parsing
定義や意味
依存構文解析（Dependency Parsing）は、自然言語処理において文を解析し、各単語
が他の単語にどのように依存しているかを示す解析手法
依存関係は、文の構造を木構造で表現し、ノードが単語を示し、エッジが依存関係を
示す
例えば、&quot;The dog chased the cat&quot; という文では、&quot;chased&quot; が動詞であり、&quot;dog&quot; およ
び &quot;cat&quot; がそれぞれ主語と目的語として動詞に依存する
木構造は通常、ルートに文の主動詞を持ち、文の構造に従って他の単語が配置される
嚙み砕いた説明
依存構文解析は、文の単語同士の関係を示すことで、文の意味をより明確に理解する
ための技術
各単語が他の単語にどのように「依存」しているかを明らかにし、意味の解釈を助け
る
例えば、文の中でどの単語が動作を行っているか（主語）、どの単語が動作を受ける
か（目的語）を明らかにする
実際の応用例
依存構文解析は、情報抽出、機械翻訳、感情分析、質問応答システムなど、さまざま
な自然言語処理タスクで利用される
例えば、NLTK（Natural Language Toolkit）を用いてPythonで依存構文解析を行う方
法を示す


# Page. 30

![Page Image](https://bcdn.docswell.com/page/V7N8G6V4E8.jpg)

import nltk
from nltk.parse.corenlp import CoreNLPDependencyParser
# CoreNLPサーバーがローカルで実行されている必要がある
parser = CoreNLPDependencyParser(url=&#039;http://localhost:9000&#039;)
# 解析したい文
sentence = &quot;The dog chased the cat&quot;
# 解析の実行
parse, = parser.raw_parse(sentence)
# 依存関係の表示
for governor, dep, dependent in parse.triples():
print(governor, dep, dependent)
# 出力例:
# (&#039;chased&#039;, &#039;VBD&#039;) (&#039;nsubj&#039;, &#039;dog&#039;)
# (&#039;chased&#039;, &#039;VBD&#039;) (&#039;dobj&#039;, &#039;cat&#039;)
上記の例では、NLTKのCoreNLPDependencyParserを使用して文を解析し、依存関係
を抽出
nsubj は主語を示す依存関係を、 dobj は直接目的語を示す依存関係を表す
実際の使用には、CoreNLPサーバーのセットアップが必要である点に注意
Constituency Parsing
定義や意味
Constituency Parsing（構成素解析）は、自然言語処理における手法の一つで、文を
その構成要素（構成素）に分解し、それらの要素がどのように組み合わさって文全体
を構成しているかを解析する技術
この解析は文法的な階層構造をもつ木構造として表現され、各ノードが文の一部（例
えば名詞句や動詞句）を表す
構成素解析は文法理論に基づく文法解析の一種で、コンテクストフリー文法（CFG）
などが用いられる
解析の結果は通常、構文木（parse tree）として視覚化される


# Page. 31

![Page Image](https://bcdn.docswell.com/page/YJ9KWL64J3.jpg)

嚙み砕いた説明
構成素解析は文を「意味のある単位」に分解する技術
例えば「The quick brown fox jumps over the lazy dog」という文を構成素解析する
と、「The quick brown fox」が名詞句、「jumps over the lazy dog」が動詞句として
識別される
このプロセスでは、文をトークンに分解し、それらがどういう構造で結びついている
かを木構造で示す
簡単に言えば、文を「どんな部品でできているか」を見ていく解析手法
実際の応用例
構成素解析は、自然言語処理（NLP）において文の文法構造を理解するために使われ
る
応用例として、機械翻訳や情報検索、音声認識などがあり、文の意味を正確に理解す
ることで精度を向上させる
以下はPythonのNLTKライブラリを用いた構成素解析の実装例：


# Page. 32

![Page Image](https://bcdn.docswell.com/page/GJ8RNXZV7D.jpg)

import nltk
from nltk import CFG
# 文法定義
grammar = CFG.fromstring(&quot;&quot;&quot;
S -&gt; NP VP
VP -&gt; V NP
NP -&gt; Det N | Det N PP
PP -&gt; P NP
Det -&gt; &#039;the&#039;
N -&gt; &#039;dog&#039; | &#039;cat&#039;
V -&gt; &#039;chases&#039;
P -&gt; &#039;with&#039;
&quot;&quot;&quot;)
# 文のトークン化
sentence = [&#039;the&#039;, &#039;dog&#039;, &#039;chases&#039;, &#039;the&#039;, &#039;cat&#039;, &#039;with&#039;, &#039;the&#039;, &#039;dog&#039;]
# 構文解析器の作成
parser = nltk.ChartParser(grammar)
# 構文解析
for tree in parser.parse(sentence):
print(tree)
tree.pretty_print()
# 構文木の表示
このコードでは、 nltk.ChartParser を用いて文を解析し、構文木を生成する。構文木は文の
構造を視覚化し、各構成素がどのように結びついているかを示す。
Brown Corpus
定義や意味
Brown Corpusは、1961年に作成された英語のテキストコーパスであり、約1,000,000
語からなる。アメリカ英語を代表する一般的なテキストのコーパスとして、多様な文
体とジャンルから成り立っている。Brown Corpusは言語学的な研究や自然言語処理
（NLP）の基礎として広く利用されており、テキストの統計的な分析やモデルの訓練
に用いられる。
このコーパスは、15のカテゴリに分類された500のサンプルテキストで構成されてお
り、各サンプルは約2000語である。カテゴリには報道、フィクション、学術論文など


# Page. 33

![Page Image](https://bcdn.docswell.com/page/LJLKP8DR7R.jpg)

が含まれる。
Brown Corpusの単語や文の頻度分布は、言語モデルの評価やトレーニングに使用さ
れ、特に品詞タグ付けの研究において重要な役割を果たしている。
嚙み砕いた説明
Brown Corpusは、英語の文章を集めた大きなデータセットで、言葉を研究するための
便利なツール。これによって、どの単語がどれくらい使われているか、文の構造はど
うなっているかなどを調べることができる。
たとえば、ニュースの文章や小説、科学論文など、いろいろなジャンルの文章が集め
られているので、言葉の使い方がジャンルによってどう変わるかを分析するのに役立
つ。
実際の応用例
Brown Corpusは、自然言語処理のさまざまなタスクで使用されている。たとえば、言
語モデルの構築、品詞タグ付け、テキスト分類など。Pythonのライブラリである
NLTK（Natural Language Toolkit）を使用すると、簡単にこのコーパスにアクセスし
て分析を行うことができる。
以下は、NLTKを使用してBrown Corpusを分析するためのコードスニペットである。
import nltk
from nltk.corpus import brown
# Brown Corpusからカテゴリを取得
categories = brown.categories()
print(&quot;Categories in Brown Corpus:&quot;, categories)
# 特定のカテゴリの単語を取得
words_in_news = brown.words(categories=&#039;news&#039;)
print(&quot;Number of words in &#039;news&#039; category:&quot;, len(words_in_news))
# 単語の頻度分布を計算
from nltk.probability import FreqDist
fdist = FreqDist(words_in_news)
print(&quot;Most common words in &#039;news&#039; category:&quot;, fdist.most_common(10))
# 品詞タグ付きの文章を取得
tagged_sents = brown.tagged_sents(categories=&#039;news&#039;)
print(&quot;First tagged sentence in &#039;news&#039;:&quot;, tagged_sents[0])


# Page. 34

![Page Image](https://bcdn.docswell.com/page/47M246PP7W.jpg)

このコードでは、まずBrown Corpusのカテゴリを一覧表示し、「news」カテゴリの
単語数をカウントしている。さらに、「news」カテゴリにおける最も一般的な単語を
見つけ出し、最初の品詞タグ付きの文を表示している。このように、Brown Corpusを
使用することで、文章の構造や単語の頻度についての詳細な分析が可能となる。
Gutenberg Corpus
定義や意味
Gutenberg Corpusは、Project Gutenbergからのテキストを含む大規模なテキストデー
タセットである。Project Gutenbergは、著作権の切れた文学作品をデジタル化して無
料で提供するプロジェクトで、Gutenberg Corpusはその一部のデジタルテキストを収
集したもの。
自然言語処理(NLP)やテキストマイニングの研究や学習でよく利用される。特に、言
語モデルの構築やテキスト分析、単語の頻度計算などに使われることが多い。
嚙み砕いた説明
Gutenberg Corpusは、たくさんの古典的な文学作品を集めたデータセット。たとえ
ば、シェイクスピアやオースティンの作品が含まれている。こうした作品を分析する
ことで、文章の構造や単語の使われ方を学ぶことができる。
NLPの勉強をしたいときに、無料で簡単に手に入るテキストデータとして、
Gutenberg Corpusはとても便利。
実際の応用例
自然言語処理の実験や研究で、テキストデータを用いてテキスト解析を行う際のデー
タセットとして使用される。
PythonのNLTKライブラリを使用してGutenberg Corpusを利用する例を以下に示す。


# Page. 35

![Page Image](https://bcdn.docswell.com/page/P7RMWP1YJ9.jpg)

import nltk
from nltk.corpus import gutenberg
# Gutenberg Corpusから&#039;Emma&#039;というテキストを読み込む
emma_text = gutenberg.words(&#039;austen-emma.txt&#039;)
# 単語の数を表示
print(f&quot;Number of words in &#039;Emma&#039;: {len(emma_text)}&quot;)
# 初めの100単語を表示
print(emma_text[:100])
# 単語の頻度を計算
from nltk.probability import FreqDist
freq_dist = FreqDist(emma_text)
print(freq_dist.most_common(10))
# 最も頻度の高い単語を10個表示
上記のコードでは、NLTKを使用してGutenberg Corpusからジェーン・オースティン
の「エマ」を取得し、その単語数や頻度を分析している。このように、テキストの内
容をプログラムで処理することができる。
Reuters Corpus
定義や意味
Reuters Corpusとは、ニュース記事を対象とした大規模なテキストデータセットの一
つであり、特に自然言語処理（NLP）のタスクにおいて広く使用されている
このデータセットは、元々ロイター通信社のニュース記事を基に作成され、テキスト
分類やトピックモデリングなどのタスクに利用される
NLTK（Natural Language Toolkit）は、Pythonで自然言語処理を行うためのライブラ
リであり、Reuters Corpusを含むいくつかのコーパスが標準で利用可能
嚙み砕いた説明
Reuters Corpusは、新聞やニュース記事から成るテキストデータ集で、研究者や開発
者が自然言語処理の技術をテストするための教材として使われる
例えば、ニュース記事をスポーツ、政治、経済などのカテゴリに分類するためのモデ
ルを作成するときに、このコーパスを用いる


# Page. 36

![Page Image](https://bcdn.docswell.com/page/PJXVP3Y4EX.jpg)

NLTKを使うことで、簡単にこのデータセットをプログラムに取り込み、分析やモデ
ル訓練に利用できる
実際の応用例
テキスト分類: ニュース記事をカテゴリごとに分類するための機械学習モデルを訓練
トピックモデリング: ニュース記事から潜在的なトピックを抽出するための分析
自然言語処理の研究や教育: NLP技術の開発や学習におけるデータセットとしての利
用
以下にNLTKを用いてReuters Corpusを活用するコードスニペットを示す:
import nltk
from nltk.corpus import reuters
# Reuters Corpusをダウンロード（初回のみ必要）
nltk.download(&#039;reuters&#039;)
# 全てのファイルIDを取得
file_ids = reuters.fileids()
# 特定のファイルの内容を取得
document = reuters.raw(file_ids[0])
print(document)
# カテゴリ一覧を取得
categories = reuters.categories()
print(categories)
# 特定のカテゴリに属するファイルIDを取得
sports_file_ids = reuters.fileids(&#039;sport&#039;)
print(sports_file_ids)
# スポーツカテゴリの最初のファイル内容を表示
sports_document = reuters.raw(sports_file_ids[0])
print(sports_document)
このコードでは、NLTKライブラリを利用してReuters Corpusからデータを取得し、
特定のカテゴリやファイルの内容を表示可能
reuters.fileids() を使ってファイルIDを取得し、 reuters.raw() でその内容を抽出
カテゴリ情報を活用して、特定ジャンルの記事を分析することができる


# Page. 37

![Page Image](https://bcdn.docswell.com/page/3JKQDY3PJD.jpg)

Synsets
定義や意味
Synsets（シンセット）は、WordNetという辞書の中で使われる基本的な単位。
WordNetは英語の語彙を整理し、意味的に関連する単語をグループ化するためのデー
タベース。
Synsetは、同義語の集合を指し、各Synsetにはその意味を説明する定義（gloss）が
付随する。また、Synsetは語彙間の意味的な関係（例：上位概念、下位概念）を持
つ。
例えば、&quot;dog&quot;という単語は、犬を意味するSynsetに含まれる。
嚙み砕いた説明
Synsetsは、単語が持つ意味を定義するための「意味のグループ」。例え
ば、&quot;bank&quot;という単語はお金を預ける「銀行」か、川の「土手」かによって異なる意
味を持つが、それぞれ別のSynsetとして整理される。
Synsetsを使うことで、単語の意味を正確に理解し、関連する語彙を辿ることができ
る。
実際の応用例
Synsetsは自然言語処理（NLP）において、単語の意味の曖昧性を解消するために使
用される。たとえば、テキストの意味を解析する際に、&quot;bank&quot;が「川の土手」なのか
「金融機関」なのかを判断するためにSynsetを活用する。
PythonのNLTKライブラリでは、WordNetを利用してSynsetsを簡単に扱うことができ
る。
from nltk.corpus import wordnet as wn
# &#039;dog&#039;のSynsetを取得
dog_synsets = wn.synsets(&#039;dog&#039;)
# 各Synsetの情報を表示
for synset in dog_synsets:
print(f&quot;Synset: {synset.name()}&quot;)
print(f&quot;Definition: {synset.definition()}&quot;)
print(f&quot;Examples: {synset.examples()}&quot;)
print(&quot;---&quot;)


# Page. 38

![Page Image](https://bcdn.docswell.com/page/LE3PR9G4J5.jpg)

上記のコードは、&quot;dog&quot;という単語に関連するSynsetsを取得し、それぞれのSynsetの
名前、定義、および例文を出力する。これにより、単語の異なる意味を把握すること
ができる。
Hypernyms
定義や意味
Hypernyms（上位語）は、言語学や自然言語処理において特定の単語が他の単語を包
含する関係を示す概念。具体的には、ある語がより一般的な意味を持つ他の語の下位
に位置することを指す。例えば、「犬」は「動物」のHypernymである。
数式的には、ある語 A が語 B のHypernymである場合、A ⊃ B という関係が成り立
つ。
嚙み砕いた説明
Hypernymは、言葉の関係性を示すために用いられる。例えば、「車」という言葉は
「乗り物」のHypernymになる。車は乗り物の一種であり、乗り物という分類の中に
含まれる。
この概念は日常的な会話の中で、物事を分類する際に自然に使われるもので、具体例
を挙げると「リンゴ」は「果物」の一種であるため、「果物」は「リンゴ」の
Hypernymである。
実際の応用例
自然言語処理（NLP）において、Hypernymsはテキストの意味解析や情報の分類に利
用される。特に、WordNetのような辞書では語の階層構造を構築するために使用され
ている。
NLTK（Natural Language Toolkit）は、Pythonを用いた自然言語処理ライブラリであ
り、WordNetを活用してHypernymsを扱うことができる。
以下はNLTKを使用して特定の単語のHypernymsを取得するコード例。


# Page. 39

![Page Image](https://bcdn.docswell.com/page/8EDLYG15JG.jpg)

import nltk
from nltk.corpus import wordnet as wn
# WordNetデータベースの使用準備
nltk.download(&#039;wordnet&#039;)
# &#039;dog&#039;のSynset（意味のセット）を取得
dog_synsets = wn.synsets(&#039;dog&#039;)
# &#039;dog&#039;の最初のSynsetを選択
dog = dog_synsets[0]
# &#039;dog&#039;のHypernymsを取得
hypernyms = dog.hypernyms()
# 各Hypernymを出力
for hypernym in hypernyms:
print(hypernym.name(), &quot;:&quot;, hypernym.definition())
このコードは、WordNetから「dog」の上位語を取得し、それぞれの上位語の名前と
定義を表示する。例えば、「Canis」や「Carnivore」などの上位語が得られる。
Hyponyms
定義や意味
Hyponyms（下位語）とは、特定のカテゴリーに属する概念を指す単語のことを言
う。言語学において、ある単語が他の単語に対してより具体的な意味を持つ場合、そ
の具体的な単語を下位語と呼ぶ。例えば、「犬」は「動物」の下位語であり、「ビー
グル」は「犬」の下位語である。
形式的には、語彙階層において、ある語が他の語の意味範囲に含まれる場合、その語
は下位語となる。
嚙み砕いた説明
Hyponymsは、特定のグループやカテゴリーの中でより具体的な項目を表す言葉。た
とえば、「車」という単語は「乗り物」の下位語であり、「セダン」は「車」の下位
語。これにより、言語の階層構造が形成され、特定の概念がどのように細分化される
かを理解できる。


# Page. 40

![Page Image](https://bcdn.docswell.com/page/V7P263QD78.jpg)

具体的な例としては、「フルーツ」という言葉に対して「リンゴ」や「バナナ」は下
位語となる。
実際の応用例
NLTK（Natural Language Toolkit）はPythonライブラリで、自然言語処理に使用され
る。NLTKを使ってHyponymsを分析することで、テキスト内の単語の階層構造を理解
し、より詳細なテキスト解析を行うことができる。
以下のコードスニペットは、NLTKを用いて「dog」という単語のHyponymsを取得す
る例である。
import nltk
from nltk.corpus import wordnet as wn
# &#039;dog&#039;のSynsetを取得
dog_synset = wn.synsets(&#039;dog&#039;)[0]
# &#039;dog&#039;のHyponymsを取得
dog_hyponyms = dog_synset.hyponyms()
# Hyponymsの名前を出力
for hyponym in dog_hyponyms:
print(hyponym.name())
# 出力例:
# &#039;Great_Dane.n.01&#039;, &#039;hunting_dog.n.01&#039;, &#039;toy_dog.n.01&#039;, ...
このコードは、WordNetを利用して「dog」という単語の下位語を取得し、それを出
力する。WordNetは、語彙の階層構造を扱うためのデータベースであり、NLTKと組
み合わせることでHyponymsの探索を簡単に行うことができる。
Bigram
定義や意味
ビグラムとは、与えられたテキストデータにおいて連続する2つの単語のペアを指
す。自然言語処理（NLP）におけるn-gramの一種であり、n=2の場合に該当する。
ビグラムは、テキスト内の単語の出現順序を考慮した上での解析を可能にする。これ
により、単語間の依存関係や共起関係を解析することができる。


# Page. 41

![Page Image](https://bcdn.docswell.com/page/2JVD345GJQ.jpg)

数学的に、ビグラムは確率モデルとして表現されることが多く、ある単語が続く確率
を次のように示すことができる：
C(wi−1 , wi )
C(wi−1 )
P (wi ∣wi−1 ) =
​
​
​
​
​
​
ここで、C(wi−1 , wi )はビグラム(wi−1 , wi )の出現回数、C(wi−1 )は単語wi−1 の出
​
​
​
​
​
​
現回数である。
嚙み砕いた説明
ビグラムは、文章を2つずつの単語の組み合わせに分割したもの。たとえば、&quot;I love
programming&quot;という文章では、(&quot;I&quot;, &quot;love&quot;)と(&quot;love&quot;, &quot;programming&quot;)という2つのビグ
ラムが生成される。
単語がどのように並ぶかを見ることで、文章の意味や構造を解析することができる。
たとえば、英語の文法的なパターンや、特定の単語がどの単語と一緒に使われやすい
かを知ることができる。
実際の応用例
ビグラムは、テキストの自動生成、文章の要約、テキスト分類、言語モデルの構築な
ど、自然言語処理のさまざまなタスクで使用されている。
PythonのNLTKライブラリを使って、テキストからビグラムを抽出する簡単な例を示
す。


# Page. 42

![Page Image](https://bcdn.docswell.com/page/5EGY31PDEL.jpg)

import nltk
from nltk.util import bigrams
from nltk.tokenize import word_tokenize
# テキストのサンプル
text = &quot;I love programming with Python&quot;
# テキストをトークン化
tokens = word_tokenize(text)
# ビグラムを生成
bigram_list = list(bigrams(tokens))
# ビグラムを出力
print(bigram_list)
# 出力: [(&#039;I&#039;, &#039;love&#039;), (&#039;love&#039;, &#039;programming&#039;), (&#039;programming&#039;, &#039;with&#039;), (&#039;with&#039;, &#039;Pyth
このコードスニペットでは、NLTKライブラリを利用してテキストをトークン化し、
それをもとにビグラムのリストを生成している。
Trigram
定義や意味
Trigram（トライグラム）は、自然言語処理におけるn-gramモデルの一種で、連続す
る3つの単語の組み合わせを指す。具体的には、文章中の単語の連続する3つの部分集
合を形成するものである。トライグラムは、文脈の理解を深めるために使用され、特
に言語モデルやテキスト予測において重要な役割を果たす。
数式で表すと、トライグラムは次のように定義される。文章が単語の列 W =
(w1 , w2 , … , wn ) であるとき、トライグラムは (wi , wi+1 , wi+2 ) で 1 ≤ i ≤ n − 2
を満たすすべてのiに対して生成される。
​
​
​
​
​
​
嚙み砕いた説明
Trigramは、文中の3つの連続した単語のグループを指す。例えば、&quot;I love
programming&quot;という文があった場合、トライグラムは &quot;I love programming&quot; の一つだ
けである。この3単語の組み合わせを使用することで、文の流れや意味をより正確に
把握することができる。


# Page. 43

![Page Image](https://bcdn.docswell.com/page/4JQM5D2X7P.jpg)

より多くの単語を含むn-gram（例えば、tetragramやpentagramなど）に比べて、トラ
イグラムは計算資源をそれほど消費せずに、文脈の情報をある程度保持するバランス
が取れたモデルとされる。
実際の応用例
トライグラムは、特に自然言語処理の分野で、テキスト予測やオートコンプリートの
アルゴリズムに活用されている。言語モデルは、トライグラムを用いて、ある単語列
が続く確率を計算し、次に来る単語を予測する。
PythonのNLTKライブラリを使用してトライグラムを生成する具体例：
import nltk
from nltk import trigrams
from nltk.tokenize import word_tokenize
# サンプルのテキスト
text = &quot;I love programming and creating new things.&quot;
# トークン化（単語に分割）
tokens = word_tokenize(text)
# トライグラムの生成
trigram_model = list(trigrams(tokens))
# 結果の表示
print(trigram_model)
# 出力: [(&#039;I&#039;, &#039;love&#039;, &#039;programming&#039;), (&#039;love&#039;, &#039;programming&#039;, &#039;and&#039;), (&#039;programming&#039;, &#039;
上記のコードでは、NLTKを使って文章を単語に分割し、トライグラムを生成してい
る。それぞれのトライグラムは、文章の中で連続する3つの単語の組み合わせを示し
ている。このようにして得られたトライグラムは、後続の単語を予測したり、文章の
特徴を分析するために使用できる。


