感情分析したい(textblob

$ pip3 install textblob
$ python -m textblob.download_corpora

事前準備として、パッケージのインストールに加えて、感情分析に必要な学習データセット(=コーパス)のダウンロードが必要です。 このパッケージはNLTK(National Language Toolkit)を利用しています。 ホームディレクトリ直下に~/nltk_data/が作成され、そこに必要はデータがサブディレクトリごとにダウンロードされます。

1from textblob import TextBlob
2blob = TextBlob("分析したい文字列")
3blob.sentiment.polarity
4blob.sentiment.subjectivity

textblobパッケージを使って、文章の感情を評価できます。 感情分析は「極性(polarity)」と「主観性(subjectivity)」の軸があります。 極性は-1.0 - 1.0、主観性は0.0 - 1.0の範囲のfloat値で返ってきます。

注釈

Sentiment Analysersを読むと、感情分析に使えるモデルはPatternAnalyzerNaiveBayesAnalyzerがあります。 デフォルトはPatternAnalyzerです。

PatternAnalyzerは、おそらく文章のパターンから感情を評価するモデルです。 "文脈"みたいなものは考慮しないモデルなんだと思います。

NaiveBayesAnalyzerはあとで調べます。 返ってくる値が異なるようなので、まず両モデルの結果を確かめてみるところからはじめよかな。

データフレームを一括で分析したい

 1import pandas as pd
 2import numpy as np
 3from textblob import TextBlob
 4
 5
 6def sentiment_polarity(text: str):
 7    try:
 8        blob = TextBlob(text)
 9        return blob.sentiment.polarity
10    except TyperError as e:
11        # print(e)
12        return np.nan
13
14def sentiment_subjectivity(text: str):
15    try:
16        blob = TextBlob(text)
17        return blob.sentiment.subjectivity
18    except TyperError as e:
19        # print(e)
20        return np.nan
21
22# data: pd.DataFrame
23data["text_polarity"] = data["text"].apply(sentiment_polarity)
24data["text_subjectivity"] = data["text"].apply(sentiment_subjectivity)

Googleフォームで実施したアンケートの回答をpandas.DataFrameで処理したときに、自由記述の回答に対して実際に感情分析したときのソースです。 pandas.DataFrame.applyを使って、自由記述のカラムに対して極性と主観性をそれぞれ計算するようにしています。

回答が空欄だった場合は元データがNaNになっているため、TextBlobオブジェクトを作成する際にTypeErrorになってしまいます。 そのためtry...exceptしてnumpy.nanを返すようにしています(pandas.NAでもいいのかもしれない)。

自動翻訳したい

1blob = TextBlob("翻訳したい文字列")
2blob.translate(from_lang="en", to="ja")

元の言語(from_lang)と翻訳先の言語(to)を指定するだけで、自動翻訳できます。 英語の回答を理解するには十分な手助けになりました。