平和式典と首相挨拶の25年
2020年の広島市原爆死没者慰霊式・平和祈念式、長崎原爆犠牲者慰霊平和祈念式典における首相挨拶が酷似していると話題になっている。本記事では、1997年から2020年までのおよそ25年間の首相挨拶がどれだけ類似しているか検証する。
はじめに
- この記事をもって、私個人の政治に関する見解を主張するつもりは一切ない。これから示すのは(私の程度の低い分析によって加工された)ただのデータである。この件について賛否両論、様々な意見が存在しているのは知っている。データをどのように捉えるかは、言うまでもなく個人の自由だ。
- 同時に、この記事をもって、私の技術を人様にアピールするつもりも一切ない。私はソフトウェアエンジニアとして生計を立てているが、この記事を読んだ同業者の方が新たな技術的知見を得ることはないだろう。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 | 安倍 |
おしまい
- 2020年の類似度が0.93になったのはよくできた偶然である。
- 分析が上手くできてるか心配なので、最小値(2008)と最大値(2019)だけ、ふつうのdiffをとった結果を示して終わりとする。