2018年7月6日金曜日

エネルギー基本計画(案)と閣議決定後の正式版の単語出現頻度を比較する。(python,自然言語処理,janome)

エネルギー基本計画(案)の特徴を見てみる。としてブログを書いてきましたが、2018年7月3日に第5次エネルギー基本計画が閣議決定されました。

経済産業省:新しいエネルギー基本計画が閣議決定されました

今回はエネルギー基本計画(案)と閣議決定されたエネルギー基本計画で、単語の出現頻度の差を見てみます。

単語出現頻度の数え方の詳細はこちらを参照ください。

使用データ(pdf)

エネルギー基本計画(案)
第5次エネルギー基本計画


・インポート
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.tokenfilter import *
import pandas as pd
・単語(複合名詞を考慮)の出現回数カウント関数
def words_count(text):
    
    token_filters = [
        CompoundNounFilter(),
        POSKeepFilter('名詞'),
        POSStopFilter(["名詞,代名詞","名詞,非自立","名詞,数"]),
        TokenCountFilter()]


    a = Analyzer(token_filters=token_filters)
    counts=pd.DataFrame()

    for count in a.analyze(text):
        counts=counts.append([list(count)],ignore_index=True)
    
    counts.columns=["単語","回数"]
    counts=counts.sort_values(by="回数", ascending=False).reset_index(drop=True)
    return counts

janome Analyzer CompoundNounFilterで複合名詞を考慮して形態素解析、TokenCountFilterで数え上げを行います。名詞(代名詞、非自立名詞、数は除外)のみをフィルタで抽出しています。

・案、正式版それぞれに単語数え上げ、結合、差を計算
draft_words=words_count(draft).columns=["単語","回数_案"]
official_words=words_count(official).columns=["単語","回数_正"]

words_count=pd.merge(draft_words,official_words, on='単語',how="outer").fillna(0)
words_count=words_count.sort_values(by="差", ascending=False).reset_index(drop=True)

draftにエネルギー基本計画(案)、officialに正式版エネルギー基本計画のpdfから抽出したテキストがそれぞれ入っています。これにwords_countの関数を適応して2つの表を作ります。

この2つの表をmergeで"単語"列をキーに結合。このとき how="outer"を指定して、どちらか一方のみに出てくる単語も組み込みます。このどちらか一方のみに出てくる単語は欠測値(NaN)となるので、fillna(0)で0に置換しています。

その後、"回数_案"と"回数_正"の出現回数の差を絶対値で計算し、"差"列を作って、差が大きい順に並べ替えしました。

・出力
単語回数_案回数_正
0炭素化108.0118.010.0
1我が国147.0156.09.0
2世界58.066.08.0
3相手国4.011.07.0
4パリ協定13.019.06.0
5観点40.046.06.0
6地域73.079.06.0
7取組178.0183.05.0
8平和利用5.00.05.0
9炭素3.08.05.0
10ニーズ6.010.04.0
11選択肢40.044.04.0
12積極的36.040.04.0
13強化84.088.04.0
14支援17.021.04.0
15提案8.012.04.0
16日本27.031.04.0
17再生可能エネルギー122.0126.04.0
18平和的利用0.04.04.0
19両立8.05.03.0
20共生9.012.03.0
21CO2削減5.02.03.0
22災害時7.010.03.0
23エネルギー転換45.048.03.0
24CO2削減目標0.03.03.0
25水素等0.03.03.0
26炭素型インフラ輸出0.03.03.0
27効率火力発電4.01.03.0
28排出削減6.09.03.0
29達成10.013.03.0
30水準11.014.03.0
31可能56.059.03.0
32炭素技術1.04.03.0
33必要149.0152.03.0
34大幅12.015.03.0
35導入76.079.03.0
36活用115.0118.03.0
37関係省庁間3.01.02.0
38効率石炭火力発電1.03.02.0
39野心的11.09.02.0
40SDGs1.03.02.0
41確認11.09.02.0
42変動20.022.02.0
43すべて2.00.02.0
44評価19.021.02.0
45牽引3.05.02.0
4620.018.02.0
47分散型エネルギーシステム21.023.02.0
48確実18.020.02.0
49規制基準3.05.02.0
50関係自治体4.06.02.0
51リード7.09.02.0
52新陳代謝1.03.02.0
53国民23.025.02.0
54整合的4.06.02.0
55普及24.026.02.0
56石炭18.016.02.0
57火力依存2.00.02.0
58揚水等2.04.02.0
59従来13.015.02.0
60水電解システム1.03.02.0
61全て9.011.02.0
62目標13.015.02.0
63臨界以下1.03.02.0
64整合0.02.02.0
65アンモニア0.02.02.0
66発展シナリオ0.02.02.0
67課題解決4.06.02.0
68調整12.014.02.0
69エネルギーシステム6.08.02.0
70地球温暖化対策14.012.02.0
71コージェネレーション14.016.02.0
72追求15.017.02.0
73選択15.017.02.0
74表明1.03.02.0
75臨界圧以下2.00.02.0
76国際展開16.014.02.0
772度シナリオ2.00.02.0
78依存17.015.02.0
79関係府省庁間0.02.02.0
80現状18.020.02.0
81着実34.036.02.0
82整備54.056.02.0
83原則6.08.02.0
84海外35.033.02.0
85向上47.049.02.0
86化石燃料28.026.02.0
87原子力規制委員会6.08.02.0
88効率的36.034.02.0
89省エネルギー技術5.03.02.0
90対応73.075.02.0
91連携37.039.02.0
92安全性31.029.02.0
93課題84.086.02.0
94実施31.033.02.0
95施策6.08.02.0
96国際競争力4.06.02.0
97持続可能6.08.02.0
98SS6.08.02.0
99実現121.0123.02.0

前回も書きましたが、janome AnalyzerのCompoundNounFilterでは、名詞+名詞=名詞として、複合名詞を作ります。このため、脱、低、第などの接頭詞がつくと名詞と見なされずに途中で途切れてしまいます。また、過剰に名詞化されているものもあります。

上の表で、案と正式版で最も差が大きいのは「炭素化」ですが、これは「低炭素化」「脱炭素化」の「低」「脱」が名詞ではないため抜けているようです。

「炭素型インフラ輸出」は「低炭素型インフラ輸出」で、案では出ていなかった言葉です。「CO2削減目標」も案にはなかった言葉。逆に「火力依存」「2度シナリオ」は案にはあったものの、正式版にはなくなりました。

「平和利用」は「平和的利用」に言い換えられています。

複合語をちゃんと考慮できていないので参考程度ですが、なかなか面白い結果になりました。次回以降、もう少し複合語の抽出方法を検討してみます。


参考:
資源エネルギー庁:エネルギー基本計画(案)
第5次エネルギー基本計画(PDF形式:951KB)

janome ドキュメント
け日記:Python janomeのanalyzerが便利

Janomeで形態素解析をやってみる。
エネルギー基本計画(案)の特徴を見てみる。その1 wordcloud
エネルギー基本計画(案)の特徴を見てみる。その2 名詞でwordcloud
janomeの形態素情報を保存する。
エネルギー基本計画(案)の特徴を見てみる。その3 単語の出現回数を数える
janome Analayzerで複合語(複合名詞)を考慮して形態素解析を行う。

0 件のコメント:

コメントを投稿

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