2018年6月22日金曜日

エネルギー基本計画(案)の特徴を見てみる。その2 名詞でwordcloud(python,janome,wordcloud,自然言語処理)

2018/9/5 更新。janomeの初期化を書き忘れていました。修正していますm(__)m
---
エネルギー基本計画(案)の特徴を見てみるの続きです。前回はエネルギー基本計画(案)のpdfから抽出したテキストを使って、janomeで形態素解析しwordcloudを作りました。


(collocations=True、連語を考慮した例)

出現頻度が多い「する」「なる」などの動詞、「について」「による」などの助詞が大きく表示されています。これらはエネルギー基本計画(案)の特徴とは言いがたいので、名詞だけを取り出してみます。

・形態素情報取り出し
from janome.tokenizer import Tokenizer

word='寄り添い'

t = Tokenizer()
tokens = t.tokenize(word)

for token in tokens:
    print("表層形:",token.surface,"\n"
          "品詞:",token.part_of_speech.split(',')[0],"\n"
          "品詞細分類1:",token.part_of_speech.split(',')[1],"\n"
          "品詞細分類2:",token.part_of_speech.split(',')[2],"\n"
          "品詞細分類3:",token.part_of_speech.split(',')[3],"\n"
          "活用型:",token.infl_type,"\n"
          "活用形:",token.infl_form,"\n"
          "原形:",token.base_form,"\n"
          "読み:",token.reading,"\n"
          "発音:",token.phonetic)
表層形: 寄り添い 
品詞: 動詞 
品詞細分類1: 自立 
品詞細分類2: * 
品詞細分類3: * 
活用型: 五段・ワ行促音便 
活用形: 連用形 
原形: 寄り添う 
読み: ヨリソイ 
発音: ヨリソイ

Janomeで形態素解析をやってみる。の記事でjanomeの使い方を書きましたが、janomeで形態素解析を行うと上の例のように形態素情報を返してくれます。名詞、動詞などの品詞は.part_of_speech.split(',')[0]で取り出せます。

・インポートとファイル読み込み
from janome.tokenizer import Tokenizer
from wordcloud import WordCloud
import matplotlib.pyplot as plt 

text_file = open("enegy_plan.txt")
full_text = text_file.read()

・名詞のみを取り出し
word_list=[]
tokens = t.tokenize(full_text) 

for token in tokens:
    word = token.surface
    partOfSpeech = token.part_of_speech.split(',')[0]
    if partOfSpeech == "名詞":
        word_list.append(word)

token.part_of_speech.split(',')[0]で品詞を取り出し、名詞のみをリストに保存しています。

・半角スペース区切りの分かち書きに
words_noun=" ".join(word_list)
words_noun
出力(一部)
はじめ 2 0 1 1 年 3月 東日本 大震災 東京電力 福島 一 原子力 発電 所 事故 政府 2 0 1 4 年 4月 2 0 3 0 年 念頭 4 次 エネルギー 基本 計画 策定 原発 依存 度 低減 化石 資源 依存 度 低減 再生 可能 エネルギー 拡大 4 次 エネルギー 基本 計画 策定 4 年 2 0 3 0 年 計画 見直し 2 0 5 0 年 パリ 協定 対応 長期 化石 資源 枯渇 長期 対応 変化 エネルギー 情勢 対応 今 一 度 我が国 エネルギー 選択 構想 時期 ため 今回 エネルギー 基本 計画 見直し 2 0 3 0 年 長期 エネルギー 需給 見通し 2 0 1 5 年 7月 経済 産業 省 決定 以下 エネルギー ミックス 実現 2 0 5 0 年 シナリオ 設計 構成

・wordcloudの設定・描画
stop_words = []
fpath = "C:\Windows\Fonts\msgothic.ttc"

wordcloud2 = WordCloud(
    font_path=fpath,
    width=900, height=500,
    background_color="white",
    stopwords=set(stop_words),
    max_words=500,
    max_font_size=150
    ).generate(words_noun)

#グラフ表示する処理
plt.figure(figsize=(15,12))
plt.imshow(wordcloud2)
plt.axis("off")
plt.show()


名詞だけにしてwordcloudを描いてみましたが、「こと」「ため」という言葉が大きく出ました。これほど大きくはないですが、「これ」「よう」というのも見えます。

元の文書をみてみると、「このようなこと」「実現するため」「これに加え」「このように」などとして多く使われているようです。

・例文を形態素解析
t = Tokenizer()
text="これに加え、このようなことを実現するため"
    
tokens = t.tokenize(text)
 
for token in tokens:
    print(token)
これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
加え 動詞,自立,*,*,一段,連用形,加える,クワエ,クワエ
、 記号,読点,*,*,*,*,、,、,、
この 連体詞,*,*,*,*,*,この,コノ,コノ
よう 名詞,非自立,助動詞語幹,*,*,*,よう,ヨウ,ヨー
な 助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
こと 名詞,非自立,一般,*,*,*,こと,コト,コト
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
実現 名詞,サ変接続,*,*,*,*,実現,ジツゲン,ジツゲン
する 動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
ため 名詞,非自立,副詞可能,*,*,*,ため,タメ,タメ

「これに加え、このようなことを実現するため」という例文を作って、形態素解析してみました。「これ」は名詞-代名詞、「よう」「こと」「ため」は名詞-非自立になっています。これらを除外するため、品詞細分類1の「代名詞」「非自立」をのぞいた名詞を取り出してみます。

・名詞(代名詞、非自立名詞は除外)を取り出し
word_list2=[]
tokens = t.tokenize(full_text) 

for token in tokens:
    word = token.surface
    partOfSpeech = token.part_of_speech.split(',')[0]
    partOfSpeech2 = token.part_of_speech.split(',')[1]
    
    if partOfSpeech == "名詞":
        if (partOfSpeech2 != "非自立") and (partOfSpeech2 != "代名詞"):
            word_list2.append(word)

words_noun2=" ".join(word_list2)
words_noun2


token.part_of_speech.split(',')[1]で品詞細分類1を取り出し、"非自立"と"代名詞"は除外した上で名詞のみをリストに保存しています。

出力(一部)
はじめ 2 0 1 1 年 3月 東日本 大震災 東京電力 福島 一 原子力 発電 所 事故 政府 2 0 1 4 年 4月 2 0 3 0 年 念頭 4 次 エネルギー 基本 計画 策定 原発 依存 度 低減 化石 資源 依存 度 低減 再生 可能 エネルギー 拡大 4 次 エネルギー 基本 計画 策定 4 年 2 0 3 0 年 計画 見直し 2 0 5 0 年 パリ 協定 対応 長期 化石 資源 枯渇 長期 対応 変化 エネルギー 情勢 対応 今 一 度 我が国 エネルギー 選択 構想 時期 今回 エネルギー 基本 計画 見直し 2 0 3 0 年 長期 エネルギー 需給 見通し 2 0 1 5 年 7月 経済 産業 省 決定 エネルギー ミックス 実現 2 0 5 0 年 シナリオ 設計 構成

あまり変わっていませんが、「ため」という言葉がなくなっています。

・wordcloud設定・描画
stop_words = []
fpath = "C:\Windows\Fonts\msgothic.ttc"

wordcloud2 = WordCloud(
    font_path=fpath,
    width=900, height=500,
    background_color="white",
    stopwords=set(stop_words),
    max_words=500,
#    max_font_size=150
    ).generate(words_noun2)

#グラフ表示する処理
plt.figure(figsize=(15,12))
plt.imshow(wordcloud2)
plt.axis("off")
plt.show()


名詞(代名詞、非自立名詞を除く)のみ、連語を考慮(デフォルトでcollocation=True)でのwordcloudです。今回は最大フォントサイズの指定をしていません。

技術とエネルギーが2大単語となりました。「再生 可能」と「可能 エネルギー」も大きくありますが、wordcloudの連語考慮では2語のつながり(bigram)のみなので、再生可能エネルギーが「再生 可能」と「可能 エネルギー」に分かれてしまっているようです。「炭素」「地域」「水素」なども比較的大きく見えています。



こちらは連語を考慮せず、単語のみで作ったwordcloud。最大フォントは指定していません。「エネルギー」が中央に大きくありますが、あまりフォントの大きさが変わらず、混沌とした感じになりました。「必要」「利用」「活用」などの普通によく使われそうな言葉も見えます。

名詞のみにすることで前回よりは文章の特徴が見えてきましたが、一般的によく使われる語句の除外と3語以上の連語・複合語を考慮した方がよさそうです。

つづく

参考:
wordcloudライブラリ
https://amueller.github.io/word_cloud/index.html
先端技術研究所:AnacondaとWordCloudを用いたテキストマイニング
http://cadenza-lab.com/2018/02/04/textmining/
見習いデータサイエンティストの隠れ家:Pythonでトピックモデル Word Cloud と LDA
http://www.dskomei.com/entry/2018/04/11/001944
wordcloudのほかに、トピックモデルによる分類あり。

資源エネルギー庁:エネルギー基本計画(案)
http://www.enecho.meti.go.jp/committee/council/basic_policy_subcommittee/pdf/basic_policy_subcommittee_002.pdf

修正:PDFMinerでpdfからtxtを抽出する。
http://eneprog.blogspot.com/2018/05/pdfminerpdftxtpythonpdfminersix.html
正規表現を使って、エネルギー基本計画のテキストを整形する。
http://eneprog.blogspot.com/2018/06/pythonresplit.html
Janomeで形態素解析をやってみる。
http://eneprog.blogspot.com/2018/06/janomepython.html
エネルギー基本計画(案)の特徴を見てみる。その1 wordcloud
https://eneprog.blogspot.com/2018/06/wordcloudpythonjanome.html

0 件のコメント:

コメントを投稿

//SyntaxHighlighter CDNより https://cdnjs.com/libraries/SyntaxHighlighter // 対応言語