Traffine I/O

日本語

2023-01-20

NLTKを使った自然言語処理

NLTKとは

Natural Language Toolkit(NLTK)は、人間の言語データを処理するためのPythonライブラリです。50以上のコーパスと語彙リソースのための使いやすいインターフェースを提供し、分類、トークン化、ステミング、タグ付け、解析、および意味論的推論のためのテキスト処理ライブラリのスイートを備えています。

NLTKは、次のようないくつかの利点を提供します。

  • 多数のテキスト処理機能とツール
  • 50以上のコーパスと語彙リソースへの簡単なアクセス
  • 包括的でわかりやすいドキュメンテーション
  • ユーザーや開発者のアクティブなコミュニティ
  • NumPy、pandas、scikit-learnなどの人気のあるPythonライブラリとの統合

NLTKのインストールと設定

必要条件

NLTKのインストールを始める前に、システムが次の要件を満たしていることを確認してください。

  • Python 3.6以上がインストールされている
  • pip(Pythonのパッケージインストーラー)がインストールされている

NLTKのインストール

NLTKをインストールするには、ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行してください。

bash
$ pip install nltk

NLTKデータのダウンロード

NLTKには、コーパス、データセット、およびリソースを使用するための多様なオプションが用意されています。これらのリソースをダウンロードするには、NLTK Data Downloaderを使用する必要があります。Pythonのインタープリターまたはスクリプトで、次のコマンドを実行してください。

python
import nltk
nltk.download()

「NLTK Downloader」という新しいウィンドウが開きます。ここでは、ダウンロードしたいリソースを選択できます。初心者向けには、もっとも一般的に使用されるリソースのサブセットを含む「popular」コレクションをダウンロードすることをお勧めします。

「popular」コレクションをダウンロードするには、「Collections」タブをクリックして、「popular」を選択し、「Download」ボタンをクリックします。インターネット接続速度に応じて、ダウンロードには数分かかる場合があります。

また、「Corpora」と「Models」タブから特定のリソースをダウンロードすることもできます。

nltk.download()のオプション

nltk.download()関数には、特定のリソースやコレクションをダウンロードするために使用できるさまざまなオプションがあります。

nltk.download()関数で使用できるいくつかのオプションを以下に示します。

  • 特定のリソースのダウンロード
    特定のリソースをダウンロードするには、リソースの識別子をnltk.download()関数のパラメータとして渡します。例えば、punktトークナイザーモデルをダウンロードするには、次のコードを使用できます。
python
import nltk
nltk.download('punkt')
  • コレクションのダウンロード
    NLTKには、bookpopularallなどの事前定義されたコレクションが用意されています。特定のコレクションをダウンロードするには、コレクションの識別子をnltk.download()関数のパラメータとして渡します。例えば、popularコレクションをダウンロードするには、次のコードを使用できます。
python
import nltk
nltk.download('popular')
  • パッケージごとのリソースのダウンロード
    一部のNLTKパッケージは、正しく機能するために追加のデータが必要な場合があります。特定のパッケージのデータをダウンロードするには、nltk.download()関数に、パッケージの識別子と続くリソースの識別子を渡します。例えば、corporaパッケージのwordnetデータをダウンロードするには、次のコードを使用できます。
python
import nltk
nltk.download('corpora/wordnet')
  • 全てのリソースのダウンロード
    利用可能な全てのNLTKリソースをダウンロードするには、nltk.download()関数にall識別子を渡します。全てのリソースをダウンロードするには時間がかかり、かなりのディスクスペースが必要になることに注意してください。
python
import nltk
nltk.download('all')
  • 特定の場所へのリソースのダウンロード
    nltk.download()関数は、デフォルトでNLTKデータディレクトリにリソースをダウンロードします。リソースを特定の場所にダウンロードするには、download_dirパラメータを使用できます。例えば、punktトークナイザーモデルをカスタムディレクトリにダウンロードするには、次のコードを使用できます。
python
import nltk
nltk.download('punkt', download_dir='/path/to/your/custom/directory')

NLTKを用いたテキスト前処理

トークン化

トークン化とは、テキストを個々の単語やトークンに分割することです。これはNLPにおいて重要なステップであり、テキストの構造や内容を理解し、分析するのに役立ちます。NLTKは、ワードトークン化とセンテンストークン化の2つのトークン化方法を提供しています。

ワードトークン化

NLTKを使用してテキストを単語にトークン化するには、word_tokenize関数を使用できます。

python
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関数を使用できます。

python
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は、さまざまな言語用のストップワードの事前定義リストを提供しています。

トークンのリストからストップワードを削除するには、次のコードを使用します。

python
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は、ポーターステマー、スノーボールステマーなど、さまざまなステミングアルゴリズムを提供しています。以下は、ポーターステマーを使用した例です。

python
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を使用します。

python
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モジュールを使用します。

python
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'

参考

https://www.nltk.org/
https://github.com/nltk/nltk

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!