2018年7月27日金曜日

エネルギー基本計画から新語・複合語を探す。その1 gensim phrasesで複合語候補を探す(python,gensim.Phrases,自然言語処理,janome)

前回gensim Phrasesを使って複合語を探す方法を書きました。複数回出てきた単語の組み合わせを学習して、複合語として取り出す方法です。

今回は、閣議決定された第5次エネルギー基本計画から複合語候補を取り出してみます。目標は、エネルギー基本計画から新語を取り出し、用語を辞書に登録することです。

ちなみに今まではエネルギー基本計画(案)を使っていましたが、今回からは正式版のエネルギー基本計画を使います。

資源エネルギー庁:第5次エネルギー基本計画
http://www.enecho.meti.go.jp/category/others/basic_plan/pdf/180703.pdf

下記のページを参考にしました。

gensim Phrase
https://radimrehurek.com/gensim/models/phrases.html
コード7区:gensim の Phrases の使い方。頻出する単語ペアを検出-python
http://ailaby.com/phrases/
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる
http://ailaby.com/tweet_dict/

・インポートとデータ読み込み
from gensim.models.phrases import Phrases , Phraser
from janome.tokenizer import Tokenizer
import pandas as pd

text_file=open("energy_plan.txt").read()
text_file

出力(一部)
'はじめに\n\n2011年3月の東日本大震災及び東京電力福島第一原子力発電所事故を受けて、政府は、2014年4月、2030年を念頭に、第4次エネルギー基本計画を策定し、原発依存度の低減、化石資源依存度の低減、再生可能エネルギーの拡大を打ち出した。\n第4次エネルギー基本計画の策定から4年、2030年の計画の見直しのみならず、パリ協定の発効を受けた2050年を見据えた対応、より長期には化石資源枯渇に備えた超長期の対応、変化するエネルギー情勢への対応など、今一度、我が国がそのエネルギー選択を構想すべき時期に来ている。このため、今回のエネルギー基本計画の見直しは、2030年の長期エネルギー需給見通し(2015年7月経済産業省決定。以下「エネルギーミックス」という。)の実現と2050年を見据えたシナリオの設計で構成することとした。

・janomeで分かち書き
tokenizer = Tokenizer()
corpus=[]

tokens = tokenizer.tokenize(text_file)
corpus.append([token.surface for token in tokens])
    
print(corpus)

出力(一部)
[['はじめ', 'に', '\n\n', '2', '0', '1', '1', '年', '3月', 'の', '東日本', '大震災', '及び', '東京電力', '福島', '第', '一', '原子力', '発電', '所', '事故', 'を', '受け', 'て', '、', '政府', 'は', '、', '2', '0', '1', '4', '年', '4月', '、', '2', '0', '3', '0', '年', 'を', '念頭', 'に', '、', '第', '4', '次', 'エネルギー', '基本', '計画', 'を', '策定', 'し', '、', '原発', '依存', '度', 'の', '低減', '、', '化石', '資源', '依存', '度', 'の', '低減', '、', '再生', '可能', 'エネルギー', 'の', '拡大', 'を', '打ち出し', 'た', '。', '\n', '第', '4', '次', 'エネルギー', '基本', '計画', 'の', '策定', 'から', '4', '年', '、', '2', '0', '3', '0', '年', 'の', '計画', 'の', '見直し', 'のみ', 'なら', 'ず', '、', 'パリ', '協定', 'の', '発効', 'を', '受け', 'た', '2', '0', '5', '0', '年', 'を', '見据え', 'た', '対応', '、', 'より', '長期', 'に', 'は', '化石', '資源', '枯渇', 'に', '備え', 'た', '超', '長期', 'の', '対応', '、', '変化', 'する', 'エネルギー', '情勢', 'へ', 'の', '対応', 'など', '、', '今', '一', '度', '、', '我が国', 'が', 'その', 'エネルギー', '選択', 'を', '構想', 'す', 'べき', '時期', 'に', '来', 'て', 'いる', '。', 'この', 'ため', '、', '今回', 'の', 'エネルギー', '基本', '計画', 'の', '見直し', 'は', '、', '2', '0', '3', '0', '年', 'の', '長期', 'エネルギー', '需給', '見通し', '(', '2', '0', '1', '5', '年', '7月', '経済', '産業', '省', '決定', '。', '以下', '「', 'エネルギー', 'ミックス', '」', 'と', 'いう', '。', ')', 'の', '実現', 'と', '2', '0', '5', '0', '年', 'を', '見据え', 'た', 'シナリオ', 'の', '設計', 'で', '構成', 'する', 'こと', 'と', 'し', 'た', '。']]

janomeで分かちがきし、リストに格納します。詳しくは前回記事をご参照ください。二重のリストにすることに注意。

・Phrasesで複合語を探す。4回繰り返し。
gramCnt = 5  
tokenizer = Tokenizer()
corpus_phrase=corpus

for i in range(gramCnt-1):
    phrases = Phrases(corpus_phrase,min_count=5, threshold=10.0)
    phraser = Phraser(phrases)
    transformed=list(phraser[corpus_phrase])

    corpus_phrase = transformed

for words in corpus_phrase:
    print(" ".join(words))

gensim Phrasesで複合語を探します。前回は1回ずつ計2回変換しましたが、今回はループで回して4回繰り返しました。

パラメーターのmin_count=5, threshold=10.0はデフォルト値です(なので省略も可)

・出力(一部)
はじめ に 

 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_年 を 見据え_た シナリオ の 設計 で 構成 する_こと と し_た 。_

「東日本_大震災」「東京電力_福島_第_一_原子力_発電_所_事故」「再生_可能_エネルギー」などが複合語候補としてアンダーバーで結ばれました。

その一方、「て_いる_。」「する_こと と し_た 。_」など、複合語とは言えないフレーズも含まれています。

・複合語候補の取り出し
words_df=pd.DataFrame()

for sentence in corpus_phrase:
    for word in sentence:
        if word.find('_') >= 0:
            words_df=words_df.append([word])

words_df.columns=["複合語候補"]

words_df=(words_df.groupby("複合語候補")[["複合語候補"]].count()
       .sort_values(by="複合語候補",ascending=False)
       .rename(columns={'複合語候補': '回数'})
       .reset_index()
      )

words_df

Phrasesで変換した文章から複合語候補を取り出し、groupbyで出現回数を数えました。

・出力(一部)
複合語候補回数
0再生_可能_エネルギー171
1する_こと154
2。_\n135
3し_た128
4的_な118
5について_は91
6事業_者78
7する_ため72
8脱_炭素_化65
9し_て65
10し_て_いく65
11。_\n\n62
12。_また57
13技術_開発56
14可能_性55
15と_なる54
16新た_な53
17て_いく45
18中_で43
19し_て_いく_こと42
20必要_な42
21で_ある_。40
22さ_れる40
23で_あり39
24ある_。39
25に_加え38
26需要_家38
27安定_供給38
28観点_から37
29て_いる_。37
30し_て_いる36
31する_とともに36
32エネルギー_源36
33で_ある36
34こと_から36
35推進_する36
36エネルギー_需給_構造35
37に_向け_た35
38研究_開発35
39。_\n_また35
40廃_炉34
41て_いる33
42し_つつ33
43様々_な33
44化石_燃料32
45さ_れ_た32
46し_て_いる_。32
47安全_性31
48天然_ガス31
49に_向け_て30
50さ_れ30
51これ_まで30
52て_おり29
53LP_ガス29
54積極_的_に29
55国際_的_な28
56更_なる28
57使用_済_燃料28
58技術_革新28
59し_て_いく_ため27
60進め_て_いく27
61活用_し27
62着実_に26
63上_で26
64燃料_電池26
65について_も25
662_025
67重要_な25
68さ_せる25
69多様_な25
70において_も25
71温室_効果_ガス25
72供給_構造25
73効率_化25
74に_資する24
75安定_的_な24
76調整_力24
77。_さらに24
78分散_型_エネルギー_システム24
79行う_こと24
80に_向け_た_取組24
81さ_れ_て_いる23
82FIT_制度23
83電源_として23
84ある_。_\n23
85この_ため23
862_0_5_0_年23
87に_係る23
88エネルギー_選択23
89活用_し_た22
90電力_システム_改革22
91に_基づき22
92多様_化22
93に_取り組む22
94エネルギー_消費22
95エネルギー_需要22
962_0_3_0_年22
97(_2_0_122
98導入_拡大21
99パリ_協定21
100石油_製品21
101東京電力_福島_第_一_原子力_発電_所_事故21
102含め_た21
103競争_力21
104低_炭素_化20
105優れ_た20
106エネルギー_安全_保障20
107進める_。20
108エネルギー_転換20
109実現_する20
110中長期_的_な20
111サプライ_チェーン20
112で_ある_。_\n20
113エネルギー_政策20
114と_なり19
115高度_化19
116通じ_た19
117促進_する19
118具体_的19
119活性_化19
120のみ_なら_ず19
121この_よう_な19
122踏まえ_つつ19
123排出_量19
124できる_よう19
125エネルギー_転換_・_脱_炭素_化19
126と_なっ_て_いる18
127も_含め18
128に_基づく18
129必要_と_なる18
130新興_国18
1312_0_2_018
132て_いる_。_\n18
133適切_な18
134分散_型18
135可能_と_する18
136に_なる18
137エネルギー_分野17
138進める_こと17
139適切_に17
140に_応じ_て17
141エネルギー_ミックス17
142進める_。_\n\n17
143形_で17
144最終_処分17
145強靱_化16
146基本_計画16
147必要_が16
148し_て_き_た16
149た_場合16
150原子力_発電_所16

助詞や句読点などが含まれているものが多くありますが、「再生可能エネルギー」「脱炭素化」「温室効果ガス」などが見つかりました。
「分散型エネルギーシステム」「調整力」「電力システム改革」などのエネルギー用語もあります。

次回以降、この複合語候補から辞書登録する用語を選択してみます。


参考:
資源エネルギー庁:第5次エネルギー基本計画 http://www.enecho.meti.go.jp/category/others/basic_plan/pdf/180703.pdf
gensim Phrase
https://radimrehurek.com/gensim/models/phrases.html
gensim Phrase
https://radimrehurek.com/gensim/models/phrases.html
コード7区:gensim の Phrases の使い方。頻出する単語ペアを検出-python
http://ailaby.com/phrases/
コード7区:ツイートからユーザ辞書(MeCab や Janome 用)をpython で作ってみる http://ailaby.com/tweet_dict/
Janomeで形態素解析をやってみる。
http://eneprog.blogspot.com/2018/06/janomepython.html
janome Analayzerで複合語(複合名詞)を考慮して形態素解析を行う。
http://eneprog.blogspot.com/2018/07/janome-analayzerpython.html
gensim Phrasesで新語・複合語を探す(python、自然言語処理、機械学習)
https://eneprog.blogspot.com/2018/07/gensim-phrasespython.html

0 件のコメント:

コメントを投稿

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