14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

エニプラAdvent Calendar 2020

Day 7

自然言語処理で遊んでみた

Last updated at Posted at 2020-12-06

技術書典で購入した書籍を基に自然言語処理を試してみました。

実行環境

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]

文章のネガポジ判定

参考書籍を基に青空文庫から蜘蛛の糸(芥川龍之介)をネガポジ判定を行うとこのようになりました。
ネガティブな要素が多いようです。

image.png

参考書籍

14
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?