Natural Language Toolkit(NLTK)を使用してPython 3で言語データを操作する方法

前書き

テキストベースのコミュニケーションは、最も一般的な表現形式の1つになりました。 毎日、メール、テキストメッセージ、ツイート、ステータスの更新を行っています。 その結果、非構造化テキストデータが非常に一般的になり、大量のテキストデータを分析することが、人々が何を考えているかを理解するための重要な方法になりました。

Twitterのツイートは、世界のトレンドニューストピックを見つけるのに役立ちます。 Amazonのレビューは、ユーザーが最も評価の高い製品を購入するのに役立ちます。 これらの知識の整理と構造化の例は、自然言語処理(NLP)タスクを表しています。

NLPは、コンピューターと人間との相互作用に焦点を当てたコンピューターサイエンスの分野です。 NLP技術はテキストの分析に使用され、コンピューターが人間の言語を理解する方法を提供します。 NLPアプリケーションのいくつかの例には、自動要約、トピックセグメンテーション、および感情分析が含まれます。

このチュートリアルでは、Python用のNLPツールであるhttp://www.nltk.org/[Natural Language Toolkit(NLTK)]の使用の概要を説明します。

前提条件

このチュートリアルでは、Python 3をインストールし、コンピューターにローカルプログラミング環境をセットアップする必要があります。 そうでない場合は、https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-forに従って設定することができます-python-3 [オペレーティングシステムに適したインストールおよびセットアップガイド]。

このチュートリアルを最大限に活用するには、https://www.digitalocean.com/community/tags/python?type = tutorials [Pythonプログラミング言語]に精通している必要があります。

ステップ1-NLTKのインポート

Pythonで作業を始める前に、NLTKモジュールがインストールされていることを確認しましょう。 コマンドラインで、次のコマンドを実行してNLTKを確認します。

python -c "import nltk"
  • NLTKがインストールされている場合*、このコマンドはエラーなしで完了します。 次に、最新バージョンがインストールされていることを確認します。

python -c "import nltk; print(nltk.__version__)"

このバージョンを必要とするNLTKのTwitterパッケージを使用するため、バージョン3.2.1をインストールする必要があります。

  • NLTKがインストールされていない場合*、エラーメッセージが表示されます。

OutputTraceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'nltk'

エラーメッセージはNLTKがインストールされていないことを示しているため、 `+ pip +`を使用してライブラリをダウンロードします。

pip install nltk

次に、このチュートリアルで使用するデータとNLTKツールをダウンロードします。

ステップ2-NLTKのデータとタガーのダウンロード

このチュートリアルでは、NLTKからダウンロードできるTwitterコーパスを使用します。 具体的には、NLTKの「+ twitter_samples +」コーパスを使用します。 次のように、コマンドラインからコーパスをダウンロードしましょう。

python -m nltk.downloader twitter_samples

コマンドが正常に実行された場合、次の出力が表示されます。

Output[nltk_data] Downloading package twitter_samples to
[nltk_data]     /Users//nltk_data...
[nltk_data]   Unzipping corpora/twitter_samples.zip.

次に、品詞(POS)タガーをダウンロードします。 _POSタグ付け_は、特定のPOSタグ(名詞、動詞、形容詞、副詞など)に対応するテキスト内の単語にラベルを付けるプロセスです。 このチュートリアルでは、NLTKの「+ averaged_perceptron_tagger +」を具体的に使用します。 平均的なパーセプトロンタガーは、パーセプトロンアルゴリズムを使用して、どのPOSタグに単語が与えられる可能性が最も高いかを予測します。 次のようにタガーをダウンロードしましょう。

python -m nltk.downloader averaged_perceptron_tagger

コマンドが正常に実行された場合、次の出力が表示されます。

Output[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data]     /Users//nltk_data...
[nltk_data]   Unzipping taggers/averaged_perceptron_tagger.zip.

コーパスが正しくダウンロードされたことを再確認しましょう。 ターミナルで、Pythonインタラクティブ環境を開きます。

python

Pythonのインタラクティブ環境で、 `+ twitter_samples +`コーパスをインポートします。

from nltk.corpus import twitter_samples

NLTKのtwitterコーパスには現在、Twitter Streaming APIから取得した20,000件のツイートのサンプルが含まれています。 完全なツイートは、行区切りのhttps://www.digitalocean.com/community/tutorials/an-introduction-to-json[JSON]として保存されます。 `+ twitter_samples.fileids()+`メソッドを使用して、コーパスに存在するJSONファイルの数を確認できます。

twitter_samples.fileids()

出力は次のようになります。

Output[u'negative_tweets.json', u'positive_tweets.json', u'tweets.20150430-223406.json']

これらのファイルIDを使用して、ツイートhttps://www.digitalocean.com/community/tutorials/an-introduction-to-working-with-strings-in-python-3[strings]を返すことができます。

twitter_samples.strings('tweets.20150430-223406.json')

これを実行すると、大量の出力が返されます。 通常、次のようになります。

Output[u'RT @KirkKus: Indirect cost of the UK being in the EU is estimated to be costing Britain \xa3170 billion per year! #BetterOffOut #UKIP'...]

コーパスが正常にダウンロードされたことがわかりました。 それでは、ショートカット + ctrl + + `+ D +`でPythonインタラクティブ環境を終了しましょう。

`+ twitter_samples +`コーパスにアクセスできたので、ツイートを処理するスクリプトの作成を開始できます。

このスクリプトの目標は、 `+ twitter_samples +`コーパスの肯定的なサブセットに含まれる形容詞と名詞の数をカウントすることです。

  • *名詞*は、最も基本的な定義では、通常、人、場所、または物として定義されます。 たとえば、movie _、 book_、および_burger_はすべて名詞です。 名詞を数えることは、議論されているさまざまなトピックの数を判断するのに役立ちます。

  • *形容詞*は、名詞(または代名詞)を変更する単語です。たとえば、horrible_映画、_funny book、または_delicious_ burgerなどです。 形容詞を数えると、使用されている言語の種類、つまり 意見は事実よりも形容詞を含む傾向があります。

後でこのスクリプトを拡張して、肯定的な形容詞(great _、 awesome happy_など)と否定的な形容詞(boring _、 lame sad_など)をカウントすることができます。これらの形容詞は、製品またはたとえば、映画。 このスクリプトは、その製品または映画に関連する決定を順番に伝えることができるデータを提供します。

次のステップでスクリプトを開始します。

ステップ3-文のトークン化

まず、選択したテキストエディターで、作業するスクリプトを作成し、「++」と呼びます。

ファイルでは、まずコーパスをインポートしましょう。 次に、 ++ variableを作成し、それにhttps://www.digitaloceanを割り当てましょう。 .com / community / tutorials / understanding-lists-in-python-3 [list]の `+ positive_tweets.json +`ファイルからのツイート文字列。

nlp.py

from nltk.corpus import twitter_samples

tweets = twitter_samples.strings('positive_tweets.json')

ツイートのリストを初めて読み込むとき、各ツイートは1つの文字列として表されます。 ツイート内のどの単語が形容詞または名詞であるかを判断する前に、まずツイートをトークン化する必要があります。

*トークン化*は、一連の文字列を単語、キーワード、フレーズ、シンボル、および_tokens_と呼ばれる他の要素などの断片に分割する行為です。 「++」という新しい変数を作成して、トークン化されたツイートのリストを割り当てます。

nlp.py

from nltk.corpus import twitter_samples

tweets = twitter_samples.strings('positive_tweets.json')

この新しい変数 `+ tweets_tokens +`は、リスト内の各要素がトークンのリストであるリストです。 各ツイートのトークンを取得したので、トークンに適切なPOSタグをタグ付けできます。

ステップ4-文のタグ付け

NLTKのPOSタガーにアクセスするには、インポートする必要があります。 import statementはすべて、スクリプトの先頭に配置する必要があります。 この新しいインポートを、他のimportステートメントの下に配置しましょう。

nlp.py

from nltk.corpus import twitter_samples


tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')

これで、各トークンにタグを付けることができます。 NLTKを使用すると、「」を使用して一度にすべてを実行できます。 タグ付きリストの保存に使用する新しい変数「」を作成します。 この新しい行は、現在のスクリプトの最後に直接追加できます。

tweets_tagged = pos_tag_sents(tweets_tokens)

タグ付きトークンがどのように見えるかを理解するために、tweets_taggedリストの最初の要素は次のようになります。

[(u'#FollowFriday', 'JJ'), (u'@France_Inte', 'NNP'), (u'@PKuchly57', 'NNP'), (u'@Milipol_Paris', 'NNP'), (u'for', 'IN'), (u'being', 'VBG'), (u'top', 'JJ'), (u'engaged', 'VBN'), (u'members', 'NNS'), (u'in', 'IN'), (u'my', 'PRP$'), (u'community', 'NN'), (u'this', 'DT'), (u'week', 'NN'), (u':)', 'NN')]

ツイートはリストとして表されており、トークンごとにそのPOSタグに関する情報があることがわかります。 各トークン/タグのペアは、https://www.digitalocean.com/community/tutorials/understanding-tuples-in-python-3 [tuple]として保存されます。

NLTKでは、*形容詞*の略語は `+ JJ +`です。

NLTKタガーは、複数名詞+ NNS +)とは異なるタグで*単数名詞*( + NN +)をマークします。 単純化するために、 `+ NN +`タグを追跡することにより、単数の名詞のみをカウントします。

次のステップでは、コーパス全体に「+ JJ 」と「 NN +」が出現する回数をカウントします。

ステップ5-POSタグのカウント

アキュムレータ(カウント)変数を使用して、「+ JJ 」と「 NN +」が何回出現するかを追跡します。これは、タグが見つかるたびに継続的に追加されます。 まず、スクリプトの最後にカウントを作成します。最初にゼロに設定します。

nlp.py

from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents

tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')

変数を作成したら、2つのhttps://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python-3 [`+ for +`ループ]を作成します。 *最初のループ*は、リスト内の各ツイートを反復処理します。 * 2番目のループ*は、各ツイートの各トークン/タグのペアを反復処理します。 各ペアについて、適切なタプルインデックスを使用してタグを検索します。

次に、https://www.digitalocean.com/community/tutorials/how-to-write-を使用して、タグが文字列 + 'JJ' +`または `+ 'NN' +`のいずれかに一致するかどうかを確認します。条件文-python-3-2 [条件文]。 タグが一致する場合、適切なアキュムレータに( `++ = 1 +)を追加します。

nlp.py

from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents

tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')

JJ_count = 0
NN_count = 0

2つのループが完了したら、コーパス内の形容詞と名詞の総数を取得する必要があります。 スクリプトで見つかった形容詞と名詞の数を確認するために、スクリプトの最後にprintステートメントを追加します。

nlp.py

...

for tweet in tweets_tagged:
   for pair in tweet:
       tag = pair[1]
       if tag == 'JJ':
           JJ_count += 1
       elif tag == 'NN':
           NN_count += 1

この時点で、プログラムはコーパスで見つかった形容詞と名詞の数を出力できるようになります。

ステップ6-NLPスクリプトの実行

`+ nlp.py +`ファイルを保存して実行すると、見つかった形容詞と名詞の数を確認できます。

python nlp.py

しばらくお待ちください。スクリプトの実行には数秒かかる場合があります。 すべてうまくいった場合、スクリプトを実行すると、次の出力が得られます。

OutputTotal number of adjectives =  6094
Total number of nouns =  13180

出力が同じように見える場合は、このチュートリアルを正常に完了したことを意味します。 おめでとうございます。

完成したコード

完成したコードには、コメントを追加して、他の人と私たちの将来の自己がフォローしやすくする必要があります。 スクリプトは次のようになります。

nlp.py

# Import data and tagger
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents

# Load tokenized tweets
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')

# Tag tagged tweets
tweets_tagged = pos_tag_sents(tweets_tokens)

# Set accumulators
JJ_count = 0
NN_count = 0

# Loop through list of tweets
for tweet in tweets_tagged:
   for pair in tweet:
       tag = pair[1]
       if tag == 'JJ':
           JJ_count += 1
       elif tag == 'NN':
           NN_count += 1

# Print total numbers for each adjectives and nouns
print('Total number of adjectives = ', JJ_count)
print('Total number of nouns = ', NN_count)

このチュートリアルでは、NLTKからダウンロードしたTwitterコーパスを使用しましたが、独自のデータを読み取ることができます。 Pythonでファイルを読むことに慣れるには、https://www.digitalocean.com/community/tutorials/how-to-handle-plain-text-files-in-python-3 [“ How To Handle Python 3 "]のプレーンテキストファイル。

また、実際のTwitterデータを操作することもできます。 Twitter APIへのアクセスの詳細については、「https://www.digitalocean.com/community/tutorials/how-to-create-a-twitter-app[Twitterアプリの作成方法]」を参照してください。 https://www.digitalocean.com/community/tutorials/how-to-create-a-twitterbot-with-python-3-and-the-tweepy-libraryのガイドをご覧ください。 Python 3とTweepyライブラリ」]は、Tweepy Pythonライブラリを使用して特定のハッシュタグを含むツイートを収集する方法を示しています。 収集したデータは、NLTKで分析できます。

ここから、コードを拡張して複数名詞と単数名詞の両方をカウントしたり、形容詞の感情分析を行ったり、https://www.digitalocean.com/community/tutorials/how-to-plot-data-inでデータを視覚化したりできます。 -python-3-using-matplotlib [Python and matplotlib]。

結論

このチュートリアルでは、PythonのNLTKライブラリを使用してテキストを分析するいくつかの自然言語処理のテクニックを学びました。 Pythonでコーパスのダウンロード、トークン化、タグ付け、POSタグのカウントができるようになりました。 このチュートリアルを利用して、Pythonで独自のテキストデータを処理するプロセスを促進できます。

Related