感情分析したい(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を読むと、感情分析に使えるモデルはPatternAnalyzer
とNaiveBayesAnalyzer
があります。
デフォルトは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
)を指定するだけで、自動翻訳できます。
英語の回答を理解するには十分な手助けになりました。