喰らいつく狼の群れ

本を読んで考えたことを書きます

平和式典と首相挨拶の25年

2020年の広島市原爆死没者慰霊式・平和祈念式、長崎原爆犠牲者慰霊平和祈念式典における首相挨拶が酷似していると話題になっている。本記事では、1997年から2020年までのおよそ25年間の首相挨拶がどれだけ類似しているか検証する。

mainichi.jp

はじめに

  • この記事をもって、私個人の政治に関する見解を主張するつもりは一切ない。これから示すのは(私の程度の低い分析によって加工された)ただのデータである。この件について賛否両論、様々な意見が存在しているのは知っている。データをどのように捉えるかは、言うまでもなく個人の自由だ。
  • 同時に、この記事をもって、私の技術を人様にアピールするつもりも一切ない。私はソフトウェアエンジニアとして生計を立てているが、この記事を読んだ同業者の方が新たな技術的知見を得ることはないだろう。pythonは100年ぶりに触った。クソコードと罵ってくれ。誤りがあれば是非指摘してくれ。分析に用いた元データはGitHubで公開している。もっとインテリジェントな分析ができる方は、自由にトライしてほしい。

準備

情報元

  • Wikipedia*1によると、広島の式典は1947年から、長崎の式典は1948年から行われているそうだ。首相が出席するようになったのは、広島では1971年が初めてのことらしい。長崎については記載がなかった。挨拶を伴うようになったのがいつからかは分からない。
  • 今回の分析では、1997年から2020年までを対象としている。情報元とした首相官邸のページで遡れる限界が1997年だったからだ。検索能力が低くてすまない。大きな図書館で、過去の新聞記事を探すことも考えたが、暑くて出かける気力がなかった。

分析手法

  • 冒頭で引用した記事の「93%」がどのように算出された値か不明だが、 本分析では、Bag of Words & TF-IDFを用いて、各年の8月6日と8月9日の挨拶のコサイン類似度を算出している。詳細はググってくれ。ふつうにdiffを叩けばいいかと思ったが、そのあと類似度を算出する方法がパッと分からなかった。もちろん、この手法より適切な優れた手法はいくらでもあるだろう。
  • 私の理解している範囲で、Bag of Words & TF-IDFの説明を簡単にする。文書内に登場する単語の数をカウントし、適当に重み付けして比較する。以上だ。文や単語の順序は無視される。「私はさそり座の女である。隣の客はよく柿喰う客だ。今日は猛暑日だ。」と「今日は猛暑日だ。客の女は柿座である。私の隣はよく客喰うさそりだ。」は100%同一とみなされる。役に立つこともあれば役に立たないこともある。
  • 気になる方が手元で再現できるよう、私のコードを残しておく(が、あまり参考にしないでほしい)。Python3が動く環境なら、python3 main.py hoge.txt foo.txtでたぶん動く。動かなかったら、パッケージが足りてないかも。pipで入れてくれ。それでも動かなかったら申し訳ない。自力で直してくれ。ちなみに、定番のMeCabを使ってないのは、pipで一発で入らないので面倒というだけの理由だ。
import sys
from janome.tokenizer import Tokenizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

def wakati(text):
    tokenizer = Tokenizer()
    words = tokenizer.tokenize(text, wakati=True)
    return words
 
if __name__ == '__main__':
    args = sys.argv
    number_of_files = len(sys.argv) - 1
    texts = [None] * number_of_files
    for i in range(number_of_files):
        with open(sys.argv[i + 1], mode='r', encoding='utf-8') as f:
            texts[i] = f.read()
    
    vectorizer = TfidfVectorizer(analyzer=wakati, binary=True, use_idf=False)
    vector = vectorizer.fit_transform(texts)

    result_matrix = cosine_similarity(vector)

    print(result_matrix)

結果

類似度 メモ
1997 0.79867676 橋本
1998 0.8646762 小渕
1999 0.8813113 小渕
2000 0.88798072
2001 0.89855139 小泉
2002 0.89179084 小泉
2003 0.84663912 小泉
2004 0.90530331 小泉
2005 0.86652249 小泉
2006 0.94940035 小泉
2007 0.82304456 安倍
2008 0.72180903 福田
2009 0.80219242 麻生
2010 0.8580395
2011 0.9122949
2012 0.95023741 野田
2013 0.83244922 安倍
2014 0.8457442 安倍
2015 0.8698766 安倍
2016 0.90371553 安倍
2017 0.89728132 安倍
2018 0.86029412 安倍
2019 0.96384702 安倍
2020 0.93338 安倍

f:id:kuraitsukuookami:20200812083742p:plain

おしまい

  • 2020年の類似度が0.93になったのはよくできた偶然である。
  • 分析が上手くできてるか心配なので、最小値(2008)と最大値(2019)だけ、ふつうのdiffをとった結果を示して終わりとする。

f:id:kuraitsukuookami:20200811225236p:plain
2008

f:id:kuraitsukuookami:20200811225210p:plain
2019