はじめに
東北大学の乾・鈴木研究室のページで公開されている日本語評価極性辞書を使ったSentiment Analysis (いわゆるネガポジ判定) ライブラリ oseti を公開しました。これは日本語評価極性辞書を用いて文の評価極性 (ポジティブ/ネガティブ) のスコアを計算するものです。
何番煎じかって感じはありますけど、自分のPCの中にだけずっとあるのはもったいないので公開しました。
※バージョンv0.2 (2019/10/7公開) からの変更点を追加しました。
インストール
pip install oseti
このライブラリはMeCabを利用しているためMeCabのインストールも必要です。MeCab本体は以下のURLからダウンロードできます。
http://taku910.github.io/mecab/
あとは依存モジュールとしてneologdn
とmecab-python-windows
あるいはmecab-python3
やsengiri
がインストールされます。
使い方
import oseti
analyzer = oseti.Analyzer()
analyzer.analyze('天国で待ってる。')
# => [1.0]
analyzer.analyze('遅刻したけど楽しかったし嬉しかった。すごく充実した!')
# => [0.3333333333333333, 1.0]
テキストを入れると文ごとの評価極性のスコアが出ます。スコアの値は[-1, 1]でプラス値が大きいほどポジティブで、マイナス値が大きいほどネガティブとなります。
スコアの計算は、単語あるいは用言ごとにポジティブ (+1) あるいはネガティブ (-1) のラベルが付いた辞書を使い、それにマッチすると1あるいは-1の極性値が加えられ、極性値の総和 / マッチした単語・用言の数
でスコアを出します。たとえば遅刻したけど楽しかったし嬉しかった。
という文では、遅刻 (-1)、楽しい (+1)、嬉しい (+1) となり極性値の総和は1
で、マッチした数は3
なので1 / 3 = 0.3333
となります。
なお、「ない」や「ぬ」といった否定表現があると極性値を反転させます。
バージョンv0.2 (2019/10/7公開) からの変更点
analyzer.count_polarity('遅刻したけど楽しかったし嬉しかった。すごく充実した!')
# => [{'positive': 2, 'negative': 1}, {'positive': 1, 'negative': 0}])
analyzer.count_polarity('そこにはいつもと変わらない日常があった。')
# => [{'positive': 0, 'negative': 0}]
count_polarity
methodでは、ポジティブ/ネガティブ表現の数のみを返却します。文単位でなく文書単位の極性値を測りたい場合や、違った手法でスコアリングしたい場合に向いています。
analyzer.analyze_detail('お金も希望もない!')
# => [{'positive': [], 'negative': ['お金-NEGATION', '希望-NEGATION'], 'score': -1.0}])
analyzer.analyze_detail('お金がないわけではない')
# => [{'positive': ['お金'], 'negative': [], 'score': 1.0}]
analyze_detail
メソッドではどの単語がポジティブ/ネガティブ判定されたのかという情報も出力されます。デバッグ用に役立つかもしれません。