技術書典で購入した書籍を基に自然言語処理を試してみました。
実行環境
Google Colaboratory
実行準備
準備として、MeCabとosetiをインストールします
# MeCabのインストール
!apt install mecab python-mecab mecab-ipadic-utf8
!apt install mecab-jumandic-utf8 libmecab-dev file curl
!pip install mecab-python3==0.7
色々検証してみた結果、MeCabのバージョンを0.7
に指定しないと、後にインストールするosetiの実行でエラーになるようです
# osetiのインストール
!pip install oseti
形態素解析
MeCabで形態素解析を実行するとこのようになります。
import MeCab
text = "本日は晴天なり"
# MeCab.Taggerオブジェクトの作成
objMeCabTagger = MeCab.Tagger()
# 形態素解析された結果の出力
print(objMeCabTagger.parse(text))
本日 名詞,副詞可能,*,*,*,*,本日,ホンジツ,ホンジツ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
晴天 名詞,一般,*,*,*,*,晴天,セイテン,セイテン
なり 助動詞,*,*,*,文語・ナリ,基本形,なり,ナリ,ナリ
EOS
辞書変更
デフォルトの辞書では、固有名詞を判別していませんが、Neologdでは判別しています。
# Neologdのインストール
!git clone https://github.com/neologd/mecab-ipadic-neologd.git
!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n
この例では志村動物園
を固有名詞として判別しています。
text = "天才!志村動物園"
# MeCab標準辞書での形態素解析
objMeCabTagger = MeCab.Tagger()
print(objMeCabTagger.parse(text))
# Neologdを使った形態素解析
objMeCabTagger = MeCab.Tagger("-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd")
print(objMeCabTagger.parse(text))
天才 名詞,一般,*,*,*,*,天才,テンサイ,テンサイ
! 記号,一般,*,*,*,*,!,!,!
志村 名詞,固有名詞,人名,姓,*,*,志村,シムラ,シムラ
動物 名詞,一般,*,*,*,*,動物,ドウブツ,ドーブツ
園 名詞,接尾,一般,*,*,*,園,エン,エン
EOS
天才 名詞,一般,*,*,*,*,天才,テンサイ,テンサイ
! 記号,一般,*,*,*,*,!,!,!
志村動物園 名詞,固有名詞,一般,*,*,*,志村動物園,シムラドウブツエン,シムラドウブツエン
EOS
jumanではカテゴリーもされるそうです。
text = "マイホームを買いに行く"
objMeCabTagger = MeCab.Tagger("-d /var/lib/mecab/dic/juman-utf8")
print(objMeCabTagger.parse(text))
マイホーム 名詞,普通名詞,*,*,マイホーム,まいほーむ,代表表記:マイホーム/まいほーむ カテゴリ:場所-施設 ドメイン:家庭・暮らし
を 助詞,格助詞,*,*,を,を,連語
買い 動詞,*,子音動詞ワ行,基本連用形,買う,かい,代表表記:買う/かう ドメイン:家庭・暮らし;ビジネス 反義:動詞:売る/うる
に 助詞,格助詞,*,*,に,に,連語
行く 動詞,*,子音動詞カ行促音便形,基本形,行く,いく,代表表記:行く/いく 付属動詞候補(タ系) ドメイン:交通 反義:動詞:帰る/かえる
EOS
ネガポジ判定
osetiでは単語のポジティブ/ネガティブを判定してくれます。
天国はポジティブ、地獄はネガティブで判定しています。
import oseti
analyzer= oseti.Analyzer()
print(analyzer.analyze('天国'))
print(analyzer.analyze('地獄'))
[1.0]
[-1.0]
文章のネガポジ判定
参考書籍を基に青空文庫から蜘蛛の糸(芥川龍之介)をネガポジ判定を行うとこのようになりました。
ネガティブな要素が多いようです。
参考書籍