NLTKとは
Natural Language Toolkit(NLTK)は、人間の言語データを処理するためのPythonライブラリです。50以上のコーパスと語彙リソースのための使いやすいインターフェースを提供し、分類、トークン化、ステミング、タグ付け、解析、および意味論的推論のためのテキスト処理ライブラリのスイートを備えています。
NLTKは、次のようないくつかの利点を提供します。
- 多数のテキスト処理機能とツール
- 50以上のコーパスと語彙リソースへの簡単なアクセス
- 包括的でわかりやすいドキュメンテーション
- ユーザーや開発者のアクティブなコミュニティ
- NumPy、pandas、scikit-learnなどの人気のあるPythonライブラリとの統合
NLTKのインストールと設定
必要条件
NLTKのインストールを始める前に、システムが次の要件を満たしていることを確認してください。
- Python 3.6以上がインストールされている
- pip(Pythonのパッケージインストーラー)がインストールされている
NLTKのインストール
NLTKをインストールするには、ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行してください。
$ pip install nltk
NLTKデータのダウンロード
NLTKには、コーパス、データセット、およびリソースを使用するための多様なオプションが用意されています。これらのリソースをダウンロードするには、NLTK Data Downloaderを使用する必要があります。Pythonのインタープリターまたはスクリプトで、次のコマンドを実行してください。
import nltk
nltk.download()
「NLTK Downloader」という新しいウィンドウが開きます。ここでは、ダウンロードしたいリソースを選択できます。初心者向けには、もっとも一般的に使用されるリソースのサブセットを含む「popular」コレクションをダウンロードすることをお勧めします。
「popular」コレクションをダウンロードするには、「Collections」タブをクリックして、「popular」を選択し、「Download」ボタンをクリックします。インターネット接続速度に応じて、ダウンロードには数分かかる場合があります。
また、「Corpora」と「Models」タブから特定のリソースをダウンロードすることもできます。
nltk.download()のオプション
nltk.download()
関数には、特定のリソースやコレクションをダウンロードするために使用できるさまざまなオプションがあります。
nltk.download()
関数で使用できるいくつかのオプションを以下に示します。
- 特定のリソースのダウンロード
特定のリソースをダウンロードするには、リソースの識別子をnltk.download()
関数のパラメータとして渡します。例えば、punkt
トークナイザーモデルをダウンロードするには、次のコードを使用できます。
import nltk
nltk.download('punkt')
- コレクションのダウンロード
NLTKには、book
、popular
、all
などの事前定義されたコレクションが用意されています。特定のコレクションをダウンロードするには、コレクションの識別子をnltk.download()
関数のパラメータとして渡します。例えば、popular
コレクションをダウンロードするには、次のコードを使用できます。
import nltk
nltk.download('popular')
- パッケージごとのリソースのダウンロード
一部のNLTKパッケージは、正しく機能するために追加のデータが必要な場合があります。特定のパッケージのデータをダウンロードするには、nltk.download()
関数に、パッケージの識別子と続くリソースの識別子を渡します。例えば、corpora
パッケージのwordnet
データをダウンロードするには、次のコードを使用できます。
import nltk
nltk.download('corpora/wordnet')
- 全てのリソースのダウンロード
利用可能な全てのNLTKリソースをダウンロードするには、nltk.download()
関数にall識別子を渡します。全てのリソースをダウンロードするには時間がかかり、かなりのディスクスペースが必要になることに注意してください。
import nltk
nltk.download('all')
- 特定の場所へのリソースのダウンロード
nltk.download()
関数は、デフォルトでNLTKデータディレクトリにリソースをダウンロードします。リソースを特定の場所にダウンロードするには、download_dir
パラメータを使用できます。例えば、punkt
トークナイザーモデルをカスタムディレクトリにダウンロードするには、次のコードを使用できます。
import nltk
nltk.download('punkt', download_dir='/path/to/your/custom/directory')
NLTKを用いたテキスト前処理
トークン化
トークン化とは、テキストを個々の単語やトークンに分割することです。これはNLPにおいて重要なステップであり、テキストの構造や内容を理解し、分析するのに役立ちます。NLTKは、ワードトークン化とセンテンストークン化の2つのトークン化方法を提供しています。
ワードトークン化
NLTKを使用してテキストを単語にトークン化するには、word_tokenize
関数を使用できます。
from nltk.tokenize import word_tokenize
text = "NLTK provides various tools for text preprocessing."
tokens = word_tokenize(text)
print(tokens)
出力結果は次のようになります。
['NLTK', 'provides', 'various', 'tools', 'for', 'text', 'preprocessing', '.']
センテンストークン化
テキストをセンテンスにトークン化するには、sent_tokenize
関数を使用できます。
from nltk.tokenize import sent_tokenize
text = "NLTK is an amazing library. It provides various tools for NLP."
sentences = sent_tokenize(text)
print(sentences)
出力結果は次のようになります。
['NLTK is an amazing library.', 'It provides various tools for NLP.']
ストップワードの削除
ストップワードとは、テキストの全体的な意味にあまり貢献しないような、例えば、a、an、the、in、isなどの一般的な単語のことです。ストップワードを削除することで、テキストデータのノイズと次元数を減らすことができます。NLTKは、さまざまな言語用のストップワードの事前定義リストを提供しています。
トークンのリストからストップワードを削除するには、次のコードを使用します。
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
text = "NLTK provides various tools for text preprocessing."
tokens = word_tokenize(text)
filtered_tokens = [token for token in tokens if token.lower() not in stopwords.words('english')]
print(filtered_tokens)
出力結果は次のようになります。
['NLTK', 'provides', 'various', 'tools', 'text', 'preprocessing', '.']
ステミングとレンマ化
ステミングとレンマ化は、単語をその基本形または語幹形に変換する技術です。これにより、テキストデータの次元数が減少し、類似した単語をグループ化することができます。
ステミング
ステミングは、単語の接尾辞を削除してその語幹形を取得する方法です。NLTKは、ポーターステマー、スノーボールステマーなど、さまざまなステミングアルゴリズムを提供しています。以下は、ポーターステマーを使用した例です。
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
text = "The cats are playing with their toys."
tokens = word_tokenize(text)
stemmer = PorterStemmer()
stemmed_tokens = [stemmer.stem(token) for token in tokens]
print(stemmed_tokens)
出力結果は次のようになります。
['the', 'cat', 'are', 'play', 'with', 'their', 'toy', '.']
レンマ化
レンマ化は、単語をその基本形または辞書形であるレンマに縮約する技術です。レンマ化は、単語の文脈と品詞を考慮に入れます。NLTKを使ってレンマ化を行うには、WordNetLemmatizer
を使用します。
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
text = "The cats are playing with their toys."
tokens = word_tokenize(text)
lemmatizer = WordNetLemmatizer()
lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens]
print(lemmatized_tokens)
出力結果は次のようになります。
['The', 'cat', 'are', 'playing', 'with', 'their', 'toy', '.']
レンマ化は、文脈と品詞を考慮するため、ステミングよりも一般的に精度が高いです。しかし、その複雑さから、ステミングよりも遅くなる場合があります。
テキストの正規化
テキストの正規化とは、テキストを標準的な形式またはカノニカル形式に変換するプロセスです。テキストの小文字化、特殊文字の除去、句読点の削除、短縮形の展開など、さまざまなタスクを含むことができます。以下にいくつかの例を示します。
テキストの小文字化
テキストを小文字に変換するには、Pythonのlower()
メソッドを使用します。
text = "NLTK provides various tools for text preprocessing."
lowercase_text = text.lower()
print(lowercase_text)
出力結果は次のようになります。
'nltk provides various tools for text preprocessing.'
特殊文字の削除
テキストから特殊文字を削除するには、Pythonのre
モジュールを使用します。
import re
text = "NLTK provides various tools for text preprocessing!."
clean_text = re.sub(r'[^\w\s]', '', text)
print(clean_text)
出力結果は次のようになります。
'NLTK provides various tools for text preprocessing'
参考