2018年7月2日月曜日

janome Analayzerで複合語(複合名詞)を考慮して形態素解析を行う。(python,自然言語処理,CompoundNounFilter)

前回、エネルギー基本計画(案)をjanomeで形態素解析を行い、単語の出現回数を数えてみました。しかし、複合語が考慮されておらず、「再生可能エネルギー」が「再生」「可能」「エネルギー」のように細かく分かれてしまいました。

janomeのAnalayzerに名詞の連続のまとめあげ(複合名詞化)を行うCompoundNounFilterがあるので、今回はこれを使ってみます。

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

janome公式 Analyzer の使い方
け日記:Python janomeのanalyzerが便利


・インポート
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.tokenfilter import *

import pandas as pd

janomeのtokenizerのほか、analyzer、tokenfilterをインポートします。

・テキスト読み込み
text="建設が増えている大規模な太陽光発電施設について、環境省は森林を伐採するなど環境への負荷が大きいとして、環境影響の調査や住民への説明を事業者に義務づける「環境アセスメント法」の対象にする方針を固めました。"

2018年6月29日 NHKニュースweb 「大規模太陽光発電施設 環境アセスメント法の対象へ」より。

・普通に分かち書き
t = Tokenizer()
tokens = t.tokenize(text) 

word_list=[]

for token in tokens:
    word = token.surface
    word_list.append(word)

words_wakati=" ".join(word_list)
words_wakati
'建設 が 増え て いる 大 規模 な 太陽光 発電 施設 について 、 環境省 は 森林 を 伐採 する など 環境 へ の 負荷 が 大きい として 、 環境 影響 の 調査 や 住民 へ の 説明 を 事業 者 に 義務づける 「 環境 アセスメント 法 」 の 対象 に する 方針 を 固め まし た 。'

「環境影響」が「環境」「影響」、「事業者」が「事業」「者」、「環境アセスメント法」が「環境」「アセスメント」「法」に分かれています。

・CompoundNounFilterを使ってAnalayzerで分かち書き
token_filters = [CompoundNounFilter()]

a = Analyzer(token_filters=token_filters)
tokens=a.analyze(text)

word_list=[]

for token in tokens:
    word = token.surface
    word_list.append(word)

words_wakati=" ".join(word_list)
words_wakati
'建設 が 増え て いる 大 規模 な 太陽光発電施設 について 、 環境省 は 森林 を 伐採 する など 環境 へ の 負荷 が 大きい として 、 環境影響 の 調査 や 住民 へ の 説明 を 事業者 に 義務づける 「 環境アセスメント法 」 の 対象 に する 方針 を 固め まし た 。'

「大規模」は「大」「規模」に分かれたままですが、「太陽光発電施設」「環境影響」「事業者」「環境アセスメント法」が複合語として一つの名詞になりました。

2011年3月の東日本大震災及び東京電力福島第一原子力発電所事故を受けて、政府は、2014年4月、2030年を念頭に、第4次エネルギー基本計画を策定し、原発依存度の低減、化石資源依存度の低減、再生可能エネルギーの拡大を打ち出した。第4次エネルギー基本計画の策定から4年、2030年の計画の見直しのみならず、2050年を見据えたパリ協定への対応、より長期には化石資源枯渇に備えた超長期の対応、変化するエネルギー情勢への対応など、今一度、我が国がそのエネルギー選択を構想すべき時期に来ている。"
上記文章はエネルギー基本計画(案)の前文です。これを同様にCompoundNounFilterを使って分かち書きすると、
2011年3月 の 東日本大震災 及び 東京電力福島 第 一原子力発電所事故 を 受け て 、 政府 は 、 2014年4月 、 2030年 を 念頭 に 、 第 4次エネルギー基本計画 を 策定 し 、 原発依存度 の 低減 、 化石資源依存度 の 低減 、 再生可能エネルギー の 拡大 を 打ち出し た 。 第 4次エネルギー基本計画 の 策定 から 4年 、 2030年 の 計画 の 見直し のみ なら ず 、 2050年 を 見据え た パリ協定 へ の 対応 、 より 長期 に は 化石資源枯渇 に 備え た 超 長期 の 対応 、 変化 する エネルギー情勢 へ の 対応 など 、 今一度 、 我が国 が その エネルギー選択 を 構想 す べき 時期 に 来 て いる 。
このようになりました。

「東京電力福島第一原子力発電所事故」は「東京電力福島」「第」「一原子力発電所事故」に、「第4次エネルギー基本計画」は「第」「4次エネルギー基本計画」に分かれてしまっています。

また、「東京電力福島第一原子力発電所事故」では「東京電力福島第一発電所」と「事故」を分けてほしいところですが一つにまとめられています。

・確認
text='東京電力福島第一原子力発電所'

t = Tokenizer()
tokens = t.tokenize(text)
 
for token in tokens:
    print(token)
東京電力 名詞,固有名詞,組織,*,*,*,東京電力,トウキョウデンリョク,トーキョーデンリョク
福島 名詞,固有名詞,地域,一般,*,*,福島,フクシマ,フクシマ
第 接頭詞,数接続,*,*,*,*,第,ダイ,ダイ
一 名詞,数,*,*,*,*,一,イチ,イチ
原子力 名詞,一般,*,*,*,*,原子力,ゲンシリョク,ゲンシリョク
発電 名詞,サ変接続,*,*,*,*,発電,ハツデン,ハツデン
所 名詞,接尾,一般,*,*,*,所,ショ,ショ

「東京電力」は固有名詞として辞書に登録されているようです。「第」は名詞ではなく、接頭詞。そのほかは全て名詞です。

詳細は分かりませんが、janomeのCompoundNounFilterでは、名詞+名詞=名詞と見なして複合名詞を作っているようです。「第」は名詞ではないため複合語にはならず、この部分で分かれてしまっています(大規模、超長期も同様)。

前回行った、エネルギー基本計画(案)に出てくる単語の出現回数もCompoundNounFilterを使って複合名詞を考慮して数えてみました。

・複合名詞を考慮してエネルギー基本計画(案)の単語出現回数を数える。
text_file = open("enegy_plan.txt")
full_text = text_file.read()

token_filters = [
    CompoundNounFilter(),
    POSKeepFilter('名詞'),
    POSStopFilter(["名詞,代名詞","名詞,非自立","名詞,数"]),
    TokenCountFilter()]

a = Analyzer(token_filters=token_filters)
tokens=a.analyze(full_text)

counts=pd.DataFrame()

for count in tokens:
    counts=counts.append([list(count)],ignore_index=True)

counts.columns=["単語","回数"]
counts=counts.sort_values(by="回数", ascending=False).reset_index(drop=True)
counts[:200]

janomeのTokenCountFilterを使って単語の出現回数を数えています。詳しくは前回記事をご参照ください。

・単語/複合名詞の出現回数(200位まで)
単語回数
0取組178
1必要149
2我が国147
3再生可能エネルギー122
4実現121
5活用115
6炭素化108
7エネルギー104
8確保97
9重要96
10推進96
11技術85
12課題84
13強化84
14導入76
15地域73
16対応73
17利用68
18新た66
19拡大65
20開発64
2161
22促進58
23構築58
24世界58
25水素57
26可能56
27原子力56
28検討56
29エネルギー源56
30整備54
31可能性51
32今後50
33省エネルギー49
34向上47
35期待47
36エネルギー転換45
37電力44
38状況42
39技術開発41
40低減41
41選択肢40
42観点40
43多様40
44コスト39
45安定的38
46様々38
47貢献38
48適切37
49連携37
50積極的36
51効率的36
52海外35
53供給35
54事業者34
55着実34
56電源33
5733
58エネルギー需給構造32
592030年31
60実施31
61安全性31
62国際的31
63展開30
64協力30
65競争29
66化石燃料28
67石油28
68抑制28
69変化28
70効率化28
7128
72日本27
73資源27
74中心27
75増加27
76リスク26
77場合26
7826
79東京電力福島26
80役割25
81安定供給25
82国内25
83電気25
84需要家25
85市場24
86投資24
87中長期的24
88普及24
89理解24
90現在24
91維持24
92確立23
93国民23
94挑戦23
95調整力23
96エネルギー選択23
97具体的23
98環境23
99影響23
100温室効果ガス22
101政府22
102加速22
103動き22
104柔軟22
105安全22
106十分22
107技術革新22
108多様化21
109策定21
110分散型エネルギーシステム21
111在り方21
112存在21
113廃炉21
114中国21
115FIT制度21
11620
11720
118天然ガス20
119需要20
120変動20
121産業20
122進展20
123人材20
124蓄電池20
125評価19
126ガス19
127総合的19
128将来19
129解決19
130エネルギー政策19
131福島19
132エネルギー需要19
133アジア19
134LPガス18
135石炭18
136現状18
13718
138対策18
139始め18
140米国18
141導入拡大18
142確実18
143改善18
144エネルギー安全保障18
145世界的18
146不可欠18
147使用済燃料18
148支援17
149新興国17
150政策17
151発生17
152制度17
153依存17
154枠組み17
155発展17
156一原子力発電所事故17
157研究開発17
158原子力発電所16
1592050年16
160電力システム改革16
161多く16
162国際展開16
163省エネ法16
164仕組み16
165石油製品16
166エネルギーミックス16
167LNG16
168円滑15
169発電15
170各国15
171高度化15
172既存15
173エネルギー産業15
174供給構造15
175選択15
176充実15
177主体15
178他方15
179規模15
180調達15
181追求15
182社会15
183結果14
184コージェネレーション14
185創出14
186発電コスト14
187強靱化14
188長期14
189エネルギー分野14
190転換14
191分野14
192獲得14
193最大限14
194インフラ14
195エネルギー供給14
196燃料14
197資源国14
198視点14
199低下14


「再生可能エネルギー」が4位と上位にランクインしています。7位に「炭素化」がありますがこれは「低炭素化」で「低」と「炭素化」に分かれてしまったようです。「エネルギー転換」「エネルギー需給構造」などの言葉も入っています。

普通に形態素解析したときには2位になっていた「的」は「安定的」「積極的」「効率的」など複数の単語に含まれています。

前回記事の最後に普通に形態素解析した場合の単語出現回数を記載していますので、比較してみてください。

接頭詞の扱いや過剰な名詞化などの課題もありますが、前回よりも文書の特徴が分かるようになってきました。

つづく

参考:
資源エネルギー庁:エネルギー基本計画(案)

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

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

0 件のコメント:

コメントを投稿

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