always one step forward

「平成27年8月14日 内閣総理大臣談話」をRMeCabで形態素解析

今日の夕方18時、おそらく将来の日本史(または、現代史に力を入れるという歴史総合)の教科書に載るであろう出来事の1つとして「談話」が示された。

いわゆる戦後70年談話として、どの文言を使う、誰に配慮する、など話題になった内容。テキストデータとしてみるとどんな特徴があるだろう?と、以前に構築、使用したRMeCabの環境を久々に使って見てみた。

さまざまな箇所に歴史/外交/政治的な意味や配慮を感じつつ、評価は他の方に任せるとして、文章の特徴が垣間見えてけっこうおもしろかった。

環境

  • Mac OS X 10.10.4
  • Xcode 6.4 (Build 6E35b) - from $ xcodebuild -version
  • MeCab 0.996
  • IPA辞書 mecab-ipadic-2.7.0-20070801.tar.gz
  • R 3.2.0
  • RMeCab 0.9999 for R-3.2.0

データ準備

使用テキスト

  • 前述の首相官邸サイトからテキストをコピーして保存
  • 冒頭に挙げた首相官邸のページから、テキストをそのままはりつけたファイルを(めったに使っていない)GitHubにおきました。必要でしたら「20150814_original」をどうぞ

RMeCabで処理

以降は主にRMeCabの入出力を示す

(Markdown、コードブロック部分と上下の部分がアンバランス。方法を調べて多少調整するかも)

# 形態素解析の結果をデータフレームresへ
> res <- RMeCabFreq("20150814_danwa_original.txt")

file = ./20150814_danwa_original.txt
length = 578

# 例として最初の10データを表示。Info1/2は品詞情報、Freqは登場頻度
> res[1:10,]

       Term    Info1 Info2 Freq
1        え フィラー     *    1
2  いかほど     副詞  一般    1
3  ただただ     副詞  一般    1
4  ひたすら     副詞  一般    1
5      もう     副詞  一般    1
6      より     副詞  一般    1
7    二度と     副詞  一般    2
8      今や     副詞  一般    1
9      何ら     副詞  一般    1
10     共に     副詞  一般    1

78文

読んでいて、「談話」と呼ぶにはかなり長いなと感じた。文章はいくつだろう?

# resの2列目が"記号"であるデータを抽出。res[,2]で"Info1"列を参照
# 「。」78個。つまり78文
> res[res[,2]=="記号",]

    Term Info1  Info2 Freq
565   ・  記号   一般    1
566   。  記号   句点   78
567   」  記号 括弧閉    4
568   「  記号 括弧開    4
569      記号   空白   30
570   、  記号   読点  220

あとはRMeCabさまさま、データフレームresの内容を好きな切り口で見ていく

注記

  • 厳密には、形態素解析器の種類、使用する辞書の種類によって、下記の分割結果は多少異なる。今回はMeCab+IPA辞書での結果
  • kuromoji.jsなど他の形態素解析器、and/or 他の辞書を用いた場合はどうなるか?等を比較したい場合は、この談話はいい題材かもしれない

まず名詞に着目

# 名詞だけを取り出してデータフレームres_nounへ
> res_noun <- res[res[,2]=="名詞",]

# 登場する名詞は352個
> nrow(res_noun)

[1] 352

# とりあえず10個表示
> res_noun[1:10,]

      Term Info1    Info2 Freq
185 お詫び  名詞 サ変接続    1
186 リード  名詞 サ変接続    1
187   一貫  名詞 サ変接続    1
188   侵略  名詞 サ変接続    1
189   共有  名詞 サ変接続    1
190   再建  名詞 サ変接続    1
191   創設  名詞 サ変接続    1
192   努力  名詞 サ変接続    3
193   反省  名詞 サ変接続    1
194   和解  名詞 サ変接続    1

# 多く登場する順に並べる。res_nounをFreqで降順ソート
> res_noun[rev(order(res_noun$Freq)),]

Term Info1          Info2 Freq
498         たち  名詞           接尾   21
460         日本  名詞       固有名詞   14
430           私  名詞         代名詞   14
524           十  名詞             数   13
258         世界  名詞           一般   12
528         こと  名詞         非自立   10
294         国際  名詞           一般   10
209         戦争  名詞       サ変接続   10
506           年  名詞           接尾    9
480         平和  名詞   形容動詞語幹    9
443         戦後  名詞       副詞可能    9
325       我が国  名詞           一般    8
265         人々  名詞           一般    8
529         ため  名詞         非自立    7
(以下省略)

元の文脈次第だけれど、

  • 「私」や「たち」を多く使っている
  • 「日本」「世界」「国際」「戦争」「平和」「戦後」と続く

あの語は?

どうやら「これらの語を盛り込むかどうか?」が事前のトピックだったようなので、調べてみた

# 指定したTermは何回登場するか
# res[,1] は、1列目Termを指す

> res[res[,1]=="お詫び",]

      Term Info1    Info2 Freq
185 お詫び  名詞 サ変接続    1

> res[res[,1]=="侵略",]

    Term Info1    Info2 Freq
188 侵略  名詞 サ変接続    1

> res[res[,1]=="反省",]

    Term Info1    Info2 Freq
193 反省  名詞 サ変接続    1

> res[res[,1]=="支配",]

    Term Info1    Info2 Freq
218 支配  名詞 サ変接続    5

> res[res[,1]=="植民",]

    Term Info1    Info2 Freq
223 植民  名詞 サ変接続    6
  • 念のため、名詞だけのres_nounでなく、全品詞のresから拾った
  • 「お詫び」「侵略」「反省」1箇所、「支配」5箇所、「植民地」6箇所
  • もちろん、どのような文脈で登場するかは前後の語とあわせてみる必要がある
    • ターミナル上でgrepすると、たとえば「侵略」は:
$ grep -n --color=always "侵略" 20150814_danwa_original.txt

25: 事変、侵略、戦争。いかなる武力の威嚇や行使も、国際紛争を解決する手段としては、もう二度と用いてはならない。植民地支配から永遠に訣別し、すべての民族の自決の権利が尊重される世界にしなければならない。

(実際は「侵略」が色表示されて出力される)

「植民」or「植民地」

ちなみに「植民」で検索した理由は、単に「植民地」だと以下のように0件だったため

> res[res[,1]=="植民地",]

[1] Term  Info1 Info2 Freq
 <0> (または長さ 0 の row.names)

実際は「植民+地」と分割されていたことに気づいた。辞書に「植民地」を追加して形態素解析を再度行えばよいのだろうけど、今回は割愛

固有名詞

# res[,3] は、3列目Info2を指す
> res[res[,3]=="固有名詞",]

            Term Info1    Info2 Freq
448       アジア  名詞 固有名詞    6
449     アフリカ  名詞 固有名詞    1
450 インドネシア  名詞 固有名詞    1
451     オランダ  名詞 固有名詞    1
452   フィリピン  名詞 固有名詞    1
453         中国  名詞 固有名詞    3
454         台湾  名詞 固有名詞    1
455       太平洋  名詞 固有名詞    2
456         安倍  名詞 固有名詞    1
457         平成  名詞 固有名詞    1
458         広島  名詞 固有名詞    1
459           日  名詞 固有名詞    1
460         日本  名詞 固有名詞   14
461           晋  名詞 固有名詞    1
462         東京  名詞 固有名詞    1
463   東南アジア  名詞 固有名詞    2
464         欧州  名詞 固有名詞    1
465         欧米  名詞 固有名詞    1
466         沖縄  名詞 固有名詞    1
467         満州  名詞 固有名詞    1
468         米国  名詞 固有名詞    2
469         英国  名詞 固有名詞    1
470         豪州  名詞 固有名詞    2
471         長崎  名詞 固有名詞    1
472           露  名詞 固有名詞    1
473         韓国  名詞 固有名詞    1
  • 固有名詞(あくまでMeCab+IPA辞書がそう判定したもの)を全て示した
  • 分け隔てなく?言及されているようだ
  • 細かく言うと、「中華(民国)」はなく「台湾」があるな、「中国」3で「韓国」1か、などが確認できる

次は動詞

# 108個
> nrow(res_verb <- res[res[,2]=="動詞",])

[1] 108

# 登場頻度降順でソート
> res_verb[rev(order(res_verb$Freq)),]

Term Info1  Info2 Freq
85        する  動詞   自立   31
81        ある  動詞   自立   11
179       なる  動詞 非自立   10
90        なる  動詞   自立    9
180     まいる  動詞 非自立    8
80        れる  動詞   接尾    8
173       いく  動詞 非自立    6
98        刻む  動詞   自立    6
114     尽くす  動詞   自立    5
89      できる  動詞   自立    5
184     続ける  動詞 非自立    4
109       失う  動詞   自立    4
79      られる  動詞   接尾    4
176       くる  動詞 非自立    3
174       いる  動詞 非自立    3
164     超える  動詞   自立    3
95    傷つける  動詞   自立    3
172       願う  動詞   自立    2
168       進む  動詞   自立    2
160       誓う  動詞   自立    2
156       表す  動詞   自立    2
155     苦しむ  動詞   自立    2
150   繰り返す  動詞   自立    2
149     続ける  動詞   自立    2
143     知れる  動詞   自立    2
135       歩む  動詞   自立    2
117     広がる  動詞   自立    2
116   巻き込む  動詞   自立    2
102     受ける  動詞   自立    2
99        創る  動詞   自立    2
88      つなぐ  動詞   自立    2
78        せる  動詞   接尾    2
185       行く  動詞 非自立    1
(以降も登場頻度1,省略)
  • 高頻度な「する」「ある」「なる」は、おそらくどんな文書にも頻出するものだろう
  • 「まいる」「刻む」「尽くす」「続ける」が特徴的
  • 意味解析を加えると、ポジティブ/ネガティブ表現の分類もおそらくできるのだろうけれど、自分の知見を越えるので割愛(試された方おられたら教えてください)

n-gram

2-gram

名詞と動詞に絞り、形態素の連なりを2-gramと3-gramでみてみた。前述はいわゆる「単語だけ」で見ていたけれど、その前後の表現はどうなのか?がある程度わかる

# データフレームtextgramへ格納
> text_2gram <- Ngram("20150814_danwa.txt", N = 2, type = 1, pos = c("名詞", "動詞"))

file = ./20150814_danwa.txt Ngram = 2
length = 834

# Freq降順でソート
> text_2gram_ordered <- text_2gram[rev(order(text_2gram$Freq)),]

# 先頭30個を表示
> head(text_2gram_ordered, 30)

                Ngram Freq
687         [-たち]   14
730         [-刻む]    6
599         [植民-]    6
304           [-]    6
175           [-]    5
811         [過去-]    4
711   [続ける-我が国]    4
353       [国際-社会]    4
285       [-尽くす]    4
278     [刻む-続ける]    4
263         [-大戦]    4
231           [-]    4
51      [する-まいる]    4
30      [こと-できる]    4
768       [解決-する]    3
429       [平和-繁栄]    3
389       [女性-たち]    3
363         [-支配]    3
259 [傷つける-られる]    3
135       [まいる-]    3
97          [ため-]    3
84          [たち-]    3
52        [する-れる]    3
33          [こと-]    3
792       [責任-ある]    2
753   [行き詰まり-]    2
737       [自由-民主]    2
724         [-なる]    2
705   [経済-ブロック]    2
688       [秩序-挑戦]    2
  • だいぶ文脈が見えてくる
  • 「植民-地」という分割にはここで気づいた
  • 「私-たち」14回。前述の名詞で「私」が14だったので、「私」を単独で使うことはなく、常に「私たち」で使われていることがわかる。IでなくWe
  • 「胸-刻む」「刻む-続ける」が複数回登場するあたりは、明らかに書き手の意図がでているように思う

3-gram

> text_3gram <- Ngram("20150814_danwa.txt", N = 3, type = 1, pos = c("名詞", "動詞"))

file = ./20150814_danwa.txt Ngram = 3
length = 917

> text_3gram_order <- text_3gram[rev(order(text_3gram$Freq)),]
> head(text_3gram_order, 20)

                   Ngram Freq
894       [過去--刻む]    4
809     [-刻む-続ける]    4
300 [刻む-続ける-我が国]    4
188           [--]    4
652       [植民--支配]    3
147     [まいる--たち]    3
109     [ため--尽くす]    3
36        [こと--たち]    3
875       [責任-ある-]    2
778   [経済-ブロック-]    2
761       [秩序-挑戦-]    2
753         [-たち-]    2
580       [挑戦--なる]    2
554         [戦後--]    2
391     [国際-秩序-挑戦]    2
248         [--世紀]    2
218     [世界-平和-繁栄]    2
8         [ある--たち]    2
917     [飢え--苦しむ]    1
916   [食糧難-多く-無辜]    1
  • 「胸-刻む」のうち4回は「過去を胸に刻む」だった
  • 登場箇所は別かもしれないけど、「刻み続ける」主体は「我が国」

次の興味

  1. 村山談話との比較
    • 当時と今回、与党体制も外交情勢も大きく異なる中、首相官邸(談話者本人+スタッフ+スピーチライター)が相当詰めて仕上げた文章に変わりない。何か文章の特徴に差はあるのか、ないのか、それが見つかったらおもしろいかなと
  2. 段落分けの意図
    • 今回は「。」で区切られた文章の連なりとして見た。段落を意味する空行がけっこうあるが、一切見ていない。この意味や意図をなんらかの方法で見られたら
  3. 形態素解析器 and/or 使用辞書を変えるとどうなる?
    • 使われる単語は平易、シンプルな文章なのでそれほど差は出なさそうだけど

ただし、2.は方法を、3.は環境を持っておらず、誰かに教わるか、他の方の結果を待つか、としたいところ