NLPのためのPython: TextBlobライブラリ入門

Python for NLPの連載の7回目です。前回は、Latent Dirichlet AllocationとNon-Negative Matrix factorizationを用いたトピックモデリングの方法を説明しました。トピックモデリングの実行には、Scikit-Learnライブラリを使用しました。

今回は、Pythonのもう一つの強力なNLPライブラリであるTextBlobについて説明します。TextBlobはNLTKをベースに作られており、NLTKライブラリへの使いやすいインタフェースを提供しています。TextBlobを使って、品詞タグ付けから感情分析、言語翻訳からテキスト分類まで、様々なNLPタスクを実行できることを確認する予定です。

ライブラリの詳細なダウンロード方法は公式リンクにあります。サンプルコーパスだけでなく、TextBlobライブラリもインストールすることをお勧めします。

以下は、上記リンク先の手順の要点ですが、必要であれば、公式ドキュメントにインストールの詳細が記載されていますので、必ずご確認ください。

$ pip install -U textblob


また、コーパスのインストールは

$ python -m textblob.download_corpora


それでは、TextBlobライブラリの様々な機能を見ていきましょう。

トークン化

トークン化とは、大きな段落を文や単語に分割することです。通常、トークンはテキストドキュメント内の単語を指す。トークン化はTextBlobではとても簡単です。TextBlobライブラリの TextBlob オブジェクトをインポートして、トークン化したいドキュメントを渡します。そして、 sentenceswords 属性を使用してトークン化した文章と属性を取得します。では、実際にやってみましょう。

まず、TextBlob オブジェクトをインポートします。

from textblob import TextBlob


次に、ドキュメントのテキストを格納する文字列を定義する必要があります。ここでは、Wikipediaの人工知能に関する記事の最初の段落を含む文字列を作成します。

document = ("In computer science, artificial intelligence (AI), 
            sometimes called machine intelligence, is intelligence 
            demonstrated by machines, in contrast to the natural intelligence 
            displayed by humans and animals. Computer science defines AI 
            research as the study of "intelligent agents": any device that 
            perceives its environment and takes actions that maximize its
            chance of successfully achieving its goals.[1] Colloquially,
            the term "artificial intelligence" is used to describe machines
            that mimic "cognitive" functions that humans associate with other
            human minds, such as "learning" and "problem solving".[2]")


次のステップでは、このドキュメントを TextBlob クラスにパラメータとして渡します。返されたオブジェクトは、ドキュメントを単語や文にトークン化するために使われます。

text_blob_object = TextBlob(document)


トークン化された文を取得するには、 sentences 属性を使用します。

document_sentence = text_blob_object.sentences


print(document_sentence)
print(len(document_sentence))


出力では、トークン化された文と文の数が表示されます。

[Sentence("In computer science, artificial intelligence (AI),             sometimes called machine intelligence, is intelligence             demonstrated by machines, in contrast to the natural intelligence             displayed by humans and animals."), Sentence("Computer science defines AI             research as the study of "intelligent agents": any device that             perceives its environment and takes actions that maximize its            chance of successfully achieving its goals."), Sentence("[1] Colloquially,            the term "artificial intelligence" is used to describe machines            that mimic "cognitive" functions that humans associate with other            human minds, such as "learning" and "problem solving"."), Sentence("[2]")]
4


同様に、words属性は文書中の単語をトークン化したものを返します。

document_words = text_blob_object.words


print(document_words)
print(len(document_words))


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

['In', 'computer', 'science', 'artificial', 'intelligence', 'AI', 'sometimes', 'called', 'machine', 'intelligence', 'is', 'intelligence', 'demonstrated', 'by', 'machines', 'in', 'contrast', 'to', 'the', 'natural', 'intelligence', 'displayed', 'by', 'humans', 'and', 'animals', 'Computer', 'science', 'defines', 'AI', 'research', 'as', 'the', 'study', 'of', 'intelligent', 'agents', 'any', 'device', 'that', 'perceives', 'its', 'environment', 'and', 'takes', 'actions', 'that', 'maximize', 'its', 'chance', 'of', 'successfully', 'achieving', 'its', 'goals', '1', 'Colloquially', 'the', 'term', 'artificial', 'intelligence', 'is', 'used', 'to', 'describe', 'machines', 'that', 'mimic', 'cognitive', 'functions', 'that', 'humans', 'associate', 'with', 'other', 'human', 'minds', 'such', 'as', 'learning', 'and', 'problem', 'solving', '2']
84


Lemmatization

レンマタイゼーションとは、単語を辞書に載っているような語根の形にすることです。

TextBlobを使ってレマタイズを行うには、 textblob ライブラリの Word オブジェクトを使って、レマタイズしたい単語を渡し、 lemmatize メソッドを呼び出す必要がある。

from textblob import Word


word1 = Word("apples")
print("apples:", word1.lemmatize())


word2 = Word("media")
print("media:", word2.lemmatize())


word3 = Word("greater")
print("greater:", word3.lemmatize("a"))


上のスクリプトでは、”apples”, “media”, “greater” という単語に対してレンマタイズを行っています。出力には、”apple”, (appleの単数形), “medium” (mediumの単数形), “great” (greaterの正の位)という単語が表示されます。greaterという単語については、lemmatizeメソッドにパラメータとして “a “を渡していることに注意してください。これは、この単語が形容詞として扱われることを指定するものです。デフォルトでは、 lemmatize() メソッドによって単語は名詞として扱われます。品詞の構成要素の完全なリストは以下のとおりです。

ADJ, ADJ_SAT, ADV, NOUN, VERB = 'a', 's', 'r', 'n', 'v'


品詞タグ付け

SpaCyやNLTKライブラリと同様に、TextBlobライブラリにも品詞タグ付けの機能がある。

品詞タグを見つけるには、以下のように tags 属性を利用する。

for word, pos in text_blob_object.tags:
    print(word + " => " + pos)


上のスクリプトでは、Wikipediaの人工知能の記事の最初の段落にあるすべての単語のタグを表示します。上のスクリプトの出力は次のようになる。

In⇒INcomputer⇒Nscience⇒Nartificial⇒JJ∫elli≥nce⇒NAI⇒NPsome×⇒RBcal≤d⇒VBDmaχ≠⇒N∫elli≥nce⇒Nis⇒VBZ∫elli≥nce⇒Ndemonstrated⇒VBNby⇒INmaχ≠s⇒NS∈⇒INcontr∗⇒N→⇒TOthe⇒DTnatural⇒JJ∫elli≥nce⇒Ndisplayed⇒VBNby⇒INhumans⇒NSand⇒Canimals⇒NSComputer⇒NPscience⇒Ndef∈es⇒NSAI⇒NPresearch⇒Nas⇒INthe⇒DTstudy⇒Nof⇒IN∫elli≥nt⇒JJa≥nts⇒NSany⇒DTdevice⇒Ntˆ==⇒WDTperceives⇒VBZits⇒PRP$environment⇒Nand⇒Ctakes⇒VBZactions⇒NStˆ==⇒INmaximize⇒VBits⇒PRP$chance⇒Nof⇒IN≻esl–y⇒RBaχev∈g⇒VBGits⇒PRP$goals⇒NS[⇒RB1⇒CD]⇒NPColloquially⇒NPthe⇒DTterm⇒Nartificial⇒JJ∫elli≥nce⇒Nis⇒VBZused⇒VBN→⇒TOdescribe⇒VBmaχ≠s⇒NStˆ==⇒INmimic⇒JJcognitive⇒JJfunctions⇒NStˆ==⇒WDThumans⇒NSassociate⇒VBPwith⇒INother⇒JJhuman⇒JJminds⇒NSsuch⇒JJas⇒IN≤arn∈g⇒VBGand⇒Cprob≤m⇒Nsolv∈g⇒N[⇒RB2⇒CD]⇒NSIn⇒INcomputer⇒ℕscience⇒ℕartificial⇒JJ∫elli≥nce⇒ℕ
イン = IN
コンピュータ= NN
科学= NN
人工知能= JJ
知能 = NN
AI = NNP
ときどき= RB
と呼ばれる= VBD
機械= NN
知能 = NN
とは
知性 = NN
実証済み= VBN
によって= IN
機械 = NNS
において= IN
対照的 = NN
に= TO
を=> DT
自然= JJ
知能= NN
表示= VBN
によって=> IN
人間 = NNS
及び= CC
動物 = NNS
コンピュータ= NNP
科学= NN
定義= NNS
AI = NNP
研究= NN
として= IN
として= DT
研究= NN
の= IN
知的= JJ
エージェント = NNS
任意の= DT
装置= NN
その= WDT
認識する= VBZ
その= PRP$
環境 = NN
と= CC
取るべき行動= VBZ
行動 = NNS
を最大化する= IN
最大化= VB
その= PRP$
チャンス= NN
の= IN
成功= RB
達成= VBG
その= PRP$
目標 = NNS
[1 = RB
1 = CD
] = NNP
コロワイド = NNP
the = DT
用語 = NN
人工 = JJ
知能 = NN
とは= VBZ
使用される= VBN
を説明
する= TO
説明
= VB
機械= NNS
that = IN
模倣= JJ
認知= JJ
機能 = NNS
WDT
人間 = NNS
関連付ける= VBP
と= IN
他=JJ
人間 = JJ
心 = NNS
そのような= JJ
として= IN
学習= VBG
と= CC
問題 = NN
解決策= NN
[2 = RB
2 = CD
] = NNS

POSタグは、略語の形で印刷されています。各略語の正式な形は、こちらのリンクを参照してください。

テキストを単数形と複数形に変換する

TextBlobでは、 pluralize メソッドと singularize メソッドを使用して、テキストを複数形や単数形に変換することもできます。次の例を見てください。

text = ("Football is a good game. It has many health benefit")
text_blob_object = TextBlob(text)
print(text_blob_object.words.pluralize())


出力では、すべての単語の複数形が表示されます。

['Footballs', 'iss', 'some', 'goods', 'games', 'Its', 'hass', 'manies', 'healths', 'benefits']


同様に、単語を単数形にするためには、以下のように singularize メソッドを使用します。

text = ("Footballs is a goods games. Its has many healths benefits")


text_blob_object = TextBlob(text)
print(text_blob_object.words.singularize())


上のスクリプトの出力は次のようになる。

['Football', 'is', 'a', 'good', 'game', 'It', 'ha', 'many', 'health', 'benefit']


名詞句の抽出

名詞句抽出は、その名の通り、名詞を含む句を抽出することを指します。先ほど使用した人工知能に関する Wikipedia の記事の最初の段落にある名詞句をすべて探してみましょう。

名詞句を見つけるには、 TextBlob オブジェクトの noun_phrase 属性を利用すればよいのです。次の例を見てください。

text_blob_object = TextBlob(document)
for noun_phrase in text_blob_object.noun_phrases:
    print(noun_phrase)


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

computer science
artificial intelligence
ai
machine intelligence
natural intelligence
computer
science defines
ai
intelligent agents
colloquially
artificial intelligence
describe machines
human minds


この文書に含まれるすべての名詞句を見ることができます。

単語・フレーズ数の取得

前のセクションでは、Pythonの組み込みメソッド len を使って、 TextBlob オブジェクトが返す文や単語、名詞句の数を数えました。同じ目的でTextBlobの組み込みメソッドを使うことができます。

特定の単語の出現頻度を調べるには、 TextBlob オブジェクトの word_counts リストに単語の名前をインデックスとして渡す必要があります。

次の例では、Wikipedia の人工知能に関する記事の最初の段落にある “intelligence” という単語の出現回数を数えることにする。

text_blob_object = TextBlob(document)
text_blob_object.word_counts['intelligence']


もう一つの方法は、単純に words 属性の count メソッドを呼び出して、以下のように出現頻度を求める単語の名前を渡す方法です。

text_blob_object.words.count('intelligence')


ここで重要なのは、デフォルトでは大文字と小文字を区別して検索しないということです。大文字と小文字を区別して検索したい場合は、以下のように case_sensitive パラメータに True を渡す必要があります。

text_blob_object.words.count('intelligence', case_sensitive=True)


単語数と同じように、名詞句もカウントすることができます。次の例では、段落の中にある「人工知能」というフレーズを見つけます。

text_blob_object = TextBlob(document)
text_blob_object.noun_phrases.count('artificial intelligence')


出力では、2.

大文字と小文字の変換

TextBlobオブジェクトは文字列と非常によく似ています。大文字や小文字に変換したり、値を変更したり、同様に連結したりすることができます。以下のスクリプトでは、TextBlobオブジェクトのテキストを大文字に変換しています。

text = "I love to watch football, but I have never played it"
text_blob_object = TextBlob(text)


print(text_blob_object.upper())


出力では、大文字の文字列が表示されます。

I LOVE TO WATCH FOOTBALL, BUT I HAVE NEVER PLAYED IT


同様に、小文字に変換するには、以下のように lower() メソッドを使用します。

text = "I LOVE TO WATCH FOOTBALL, BUT I HAVE NEVER PLAYED IT"
text_blob_object = TextBlob(text)


print(text_blob_object.lower())


Nグラムの発見

Nグラムとは、文の中のn個の単語の組み合わせのことである。例えば、”I love watching football “という文では、(I love), (love watching), (watching football)という2-gramがある。N-gramは文章を分類する際に重要な役割を果たす。

TextBlobでは、N-gramは TextBlob オブジェクトの ngrams メソッドにN-gramの数を渡すことで見つけることができる。次の例を見てください。

text = "I love to watch football, but I have never played it"
text_blob_object = TextBlob(text)
for ngram in text_blob_object.ngrams(2):
    print(ngram)


スクリプトの出力は以下のようになる。

['I', 'love']
['love', 'to']
['to', 'watch']
['watch', 'football']
['football', 'but']
['but', 'I']
['I', 'have']
['have', 'never']
['never', 'played']
['played', 'it']


これは、言語モデルの学習やテキスト予測を行う際に特に便利です。

スペルチェック

スペルチェックはTextBlobライブラリのユニークな機能の1つです。TextBlobオブジェクトのcorrect` メソッドを使うと、テキスト中のスペルミスをすべて修正することができます。次の例を見てください。

text = "I love to watchf footbal, but I have neter played it"
text_blob_object = TextBlob(text)


print(text_blob_object.correct())


上のスクリプトでは、3つのスペルミスがありました。「watch “の代わりに “watchf”、”football “の代わりに “football”、”never “の代わりに “neter “です。出力では、以下のように、これらの間違いがTextBlobによって修正されているのがわかると思います。

I love to watch football, but I have never played it


言語翻訳

TextBlobライブラリの最も強力な機能の1つは、ある言語から別の言語への翻訳です。バックエンドでは、TextBlobの言語トランスレータはGoogle Translate APIを利用しています。

ある言語から別の言語へ翻訳するには、単にテキストを TextBlob オブジェクトに渡して、そのオブジェクトの translate メソッドを呼び出すだけでよい。テキストを翻訳してほしい言語のコードは、メソッドのパラメータとして渡されます。例を見てみましょう。

text_blob_object_french = TextBlob(u'Salut comment allez-vous?')
print(text_blob_object_french.translate(to='en'))


上のスクリプトでは、フランス語の文章を TextBlob オブジェクトに渡しています。次に、そのオブジェクトに対して translate メソッドを呼び出し、 to パラメータに言語コード en を渡します。言語コード en は英語に対応します。出力では、以下のようにフランス語の文の翻訳が表示される。

Hi, how are you?


別の例として、アラビア語から英語への翻訳を考えてみましょう。

text_blob_object_arabic = TextBlob(u'مرحبا كيف حالك؟')
print(text_blob_object_arabic.translate(to='en'))


出力されます。

Hi, how are you?


最後に、 detect_language メソッドを使用すると、文の言語を検出することもできます。次のスクリプトを見てください。

text_blob_object = TextBlob(u'Hola como estas?')
print(text_blob_object.detect_language())


出力には、スペイン語を表す es が表示されているのがわかるだろう。

すべての言語の言語コードは、このリンクで見ることができます。

テキスト分類

TextBlobにも基本的なテキスト分類機能がある。TextBlobの機能は限られているので、私はTextBlobをテキスト分類に使うことはお勧めしませんが、もし本当に限られたデータで、非常に基本的なテキスト分類モデルを素早く開発したい場合は、TextBlobを使うことができます。高度なモデルを作るには、Scikit-LearnやTensorflowなどの機械学習ライブラリがおすすめです。

では、TextBlobを使ってどのようにテキスト分類を行うか見てみましょう。まず必要なのは学習用データセットとテストデータです。分類モデルはトレーニングデータセットで学習し、テストデータセットで評価することになる。

例えば、以下のような学習データとテストデータがあったとします。

train_data = [
    ('This is an excellent movie', 'pos'),
    ('The move was fantastic I like it', 'pos'),
    ('You should watch it, it is brilliant', 'pos'),
    ('Exceptionally good', 'pos'),
    ("Wonderfully directed and executed. I like it", 'pos'),
    ('It was very boring', 'neg'),
    ('I did not like the movie', 'neg'),
    ("The movie was horrible", 'neg'),
    ('I will not recommend', 'neg'),
    ('The acting is pathetic', 'neg')
]
test_data = [
    ('Its a fantastic series', 'pos'),
    ('Never watched such a brillent movie', 'pos'),
    ("horrible acting", 'neg'),
    ("It is a Wonderful movie", 'pos'),
    ('waste of money', 'neg'),
    ("pathetic picture", 'neg')
]


このデータセットには、映画に関するダミーのレビューが含まれています。トレーニングデータセットとテストデータセットはタプルのリストで構成され、タプルの最初の要素はテキストまたは文、タプルの2番目のメンバーはテキストに対応するレビューまたは感情です。

我々はデータセットを train_data で学習し、 test_data で評価します。そのために、textblob.classifiersライブラリの NaiveBayesClassifier クラスを使用します。以下のスクリプトはこのライブラリをインポートしています。

from textblob.classifiers import NaiveBayesClassifier


モデルを学習させるには、NaiveBayesClassifier クラスのコンストラクタに学習データを渡せばよいだけです。このクラスは、データセットで学習され、テストセットで予測を行うことができるオブジェクトを返します。

classifier = NaiveBayesClassifier(train_data)


まず、1つの文に対して予測を行ってみましょう。そのためには、 classify メソッドを呼び出して、文を渡します。次の例を見てください。

print(classifier.classify("It is very boring"))


ネガティブなレビューのように見える。上記のスクリプトを実行すると、出力に neg が表示されます。

同様に、次のスクリプトを実行すると、レビューが肯定的であるため、posが返されます。

print(classifier.classify("It's a fantastic series"))


また、TextBlobオブジェクトの classifier パラメータに私たちの classifier を渡すことでも、予測を行うことができます。そして、 TextBlob オブジェクトの classify メソッドを呼び出して、予測を表示する必要があります。

sentence = TextBlob("It's a fantastic series.", classifier=classifier)
print(sentence.classify())


最後に、テストセットに対するアルゴリズムの精度を調べるために、分類器の accuracy メソッドをコールし、先ほど作成した test_data を渡します。次のスクリプトを見てください。

classifier.accuracy(test_data)


出力には、アルゴリズムの精度である0.66が表示されます。

分類に最も重要な特徴を見つけるために、show_informative_features メソッドを使用することができます。パラメータとして、最も重要な特徴の数が渡されます。

classifier.show_informative_features(3)


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

Most Informative Features
            contains(it) = False             neg : pos    =      2.2 : 1.0
            contains(is) = True              pos : neg    =      1.7 : 1.0
           contains(was) = True              neg : pos    =      1.7 : 1.0


このセクションでは、テキスト分類を使用して映画レビューのセンチメントを見つけることを試みました。実はTextBlobではテキスト分類を行わなくても、文章のセンチメントを見つけることができます。TextBlobライブラリには感情分析器が内蔵されているので、次のセクションで見てみましょう。

センチメント分析

このセクションでは、Amazon で購入された様々な食品のパブリックレビューのセンチメントを分析する。そのためにTextBlobセンチメントアナライザーを使用します。

データセットはKaggleのリンクからダウンロードすることができます。

最初のステップとして、データセットをインポートする必要があります。メモリの制約上、最初の20,000レコードのみをインポートすることにします。必要であれば、もっと多くのレコードをインポートすることができます。次のスクリプトはデータセットをインポートします。

import pandas as pd
import numpy as np


reviews_datasets = pd.read_csv(r'E:DatasetsReviews.csv')
reviews_datasets = reviews_datasets.head(20000)
reviews_datasets.dropna()


データセットがどのように見えるかを見るために、pandasのデータフレームの head メソッドを使ってみましょう。

reviews_datasets.head()


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

出力から、食べ物に関するレビューのテキストが Text カラムに含まれていることがわかります。スコア列には、1が最低、5が最高の評価で、特定の商品に対するユーザーの評価が含まれています。

評価の分布を見てみましょう。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.distplot(reviews_datasets['Score'])


各評価のレコード数をよりよく見るために、評価の棒グラフをプロットしてみましょう。

sns.countplot(x='Score', data=reviews_datasets)


出力は、半分以上のレビューが5つ星の評価を持っていることを示します。

ランダムにレビューを選択し、TextBlobを使ってその極性を求めてみましょう。350番のレビューを見てみましょう。

reviews_datasets['Text'][350]


出力します。

'These chocolate covered espresso beans are wonderful!  The chocolate is very dark and rich and the "bean" inside is a very delightful blend of flavors with just enough caffine to really give it a zing.'


どうやらポジティブなレビューのようです。TextBlobライブラリを使って検証してみましょう。sentimentを見つけるには、 TextBlog オブジェクトの sentiment 属性を使う必要があります。sentiment` オブジェクトは、レビューの極性と主観を含むタプルを返します。

極性の値は -1 から 1 の間で、極性がマイナスのレビューには否定的な感情が、極性がプラスのレビューには肯定的な感情が含まれます。

主観性は、テキストに含まれる個人的な意見と事実情報の量を定量化するもので、0から1の値をとります。主観性が高いほど、テキストには事実情報よりも個人的な意見が含まれていることを意味します。

350件目のレビューの主観を求めましょう。

text_blob_object = TextBlob(reviews_datasets['Text'][350])
print(text_blob_object.sentiment)


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

Sentiment(polarity=0.39666666666666667,subjectivity=0.6616666666666667)


この出力は、このレビューが主観性が高く、肯定的であることを示しています。

それでは、データセットに sentiment polarity のカラムを追加してみましょう。以下のスクリプトを実行します。

def find_pol(review):
    return TextBlob(review).sentiment.polarity


reviews_datasets['Sentiment_Polarity'] = reviews_datasets['Text'].apply(find_pol)
reviews_datasets.head()


では、データセット内の極性の分布を見てみましょう。以下のスクリプトを実行してください。

sns.distplot(reviews_datasets['Sentiment_Polarity'])


上のスクリプトの出力は以下のようになります。

上の図から明らかなように、ほとんどのレビューが肯定的で、極性は0から0.5の間になっています。これはデータセットのレビューのほとんどが5つ星の評価であるため、自然なことです。

それでは、各評価点の平均極性をプロットしてみましょう。

sns.barplot(x='Score', y='Sentiment_Polarity', data=reviews_datasets)


出力します。

出力は、高い評価スコアを持つレビューが高い正の極性を持つことを明確に示しています。

次に、最も否定的なレビュー、つまり極性値が-1のレビューを見てみましょう。

most_negative = reviews_datasets[reviews_datasets.Sentiment_Polarity == -1].Text.head()
print(most_negative)


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

545     These chips are nasty.  I thought someone had ...
1083    All my fault. I thought this would be a carton...
1832    Pop Chips are basically a horribly over-priced...
2087    I do not consider Gingerbread, Spicy Eggnog, C...
2763    This popcorn has alot of hulls I order 4 bags ...
Name: Text, dtype: object


レビュー番号545の値を表示してみましょう。

reviews_datasets['Text'][545]


出力では、次のようなレビューが表示されます。

'These chips are nasty.  I thought someone had spilled a drink in the bag, no the chips were just soaked with grease.  Nasty!!'


この出力から、このレビューが非常に否定的であることがはっきりとわかります。

では次に、最も肯定的なレビューを見てみましょう。次のスクリプトを実行します。

most_positive = reviews_datasets[reviews_datasets.Sentiment_Polarity == 1].Text.head()
print(most_positive)


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

106     not what I was expecting in terms of the compa...
223     This is an excellent tea.  One of the best I h...
338     I like a lot of sesame oil and use it in salad...
796     My mother and father were the recipient of the...
1031    The Kelloggs Muselix are delicious and the del...
Name: Text, dtype: object


レビュー106を詳しく見てみましょう。

reviews_datasets['Text'][106]


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

"not what I was expecting in terms of the company's reputation for excellent home delivery products"


このレビューはあまり好意的ではありませんが、excellentreputationのような単語があるため、極性1が割り当てられていることがわかります。センチメントアナライザーは100%エラー防止ではなく、先ほど見たようなケースでは間違ったセンチメントを予測する可能性があることを知っておくことが重要です。

次に、同じくポジティブとマークされたレビュー番号223を見てみましょう。

reviews_datasets['Text'][223]


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

"This is an excellent tea.  One of the best I have ever had.  It is especially great when you prepare it with a samovar."


この出力は、このレビューが非常に肯定的であることを明確に示しています。

結論

PythonのTextBlobライブラリは、最も有名で広く使われている自然言語処理ライブラリの1つです。この記事では、トークン化、ステミング、感情分析、テキスト分類、言語翻訳など、TextBlobライブラリのいくつかの機能について詳しく説明しました。

次回は、文の属性を決定したり、ソーシャルネットワークやWikipedia、検索エンジンからデータを取得するためのツールなど、本当に便利な機能をたくさん提供しているPatternライブラリについて説明したいと思います。

タイトルとURLをコピーしました