新型コロナワクチンに関する副反応をまとめた政府文書PDFをRubyでパースしてウェブシステムを作ってみた

はじめに

GMOアドマーケティングの吉岡です。

皆さんは気になる情報があった場合、政府公開文書を調べたりするでしょうか?
GMOインターネットグループでも2021年6月21日より新型コロナウィルスのワクチン摂取が開始となりますが、厚生労働省が公開している資料を確認してみたところ、接種を受ける際の同意という項目に次ような文章がありました。

https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000121431_00218.html

そこで、どのような副反応のリスクがあるのか調べてみましたが、情報がPDFでわかりづらかったため、今回はこちらのPDFをパースして、わかりやすく表示してみたいと思います。

参考資料

第61回厚生科学審議会予防接種・ワクチン分科会副反応検討部会、令和3年度第9回薬事・食品衛生審議会薬事分科会医薬品等安全対策部会安全対策調査会(合同開催) 資料.
https://www.mhlw.go.jp/stf/newpage_19142.html, (参照 令和3年6月9日(水))

※追記
第62回厚生科学審議会予防接種・ワクチン分科会副反応検討部会、令和3年度第11回薬事・食品衛生審議会薬事分科会医薬品等安全対策部会安全対策調査会(合同開催) 資料.
https://www.mhlw.go.jp/stf/shingi2/0000208910_00023.html, (参照 令和3年6月23日(水))
第63回厚生科学審議会予防接種・ワクチン分科会副反応検討部会、令和3年度第12回薬事・食品衛生審議会薬事分科会医薬品等安全対策部会安全対策調査会(合同開催) 資料.
https://www.mhlw.go.jp/stf/shingi2/0000208910_00025.html, (参照 令和3年7月7日(水))
第64回厚生科学審議会予防接種・ワクチン分科会副反応検討部会、令和3年度第13回薬事・食品衛生審議会薬事分科会医薬品等安全対策部会安全対策調査会(合同開催) 資料.
https://www.mhlw.go.jp/stf/shingi2/0000208910_00026.html, (参照 令和3年7月21日(水))

前提

Ruby 2.7.2
Rails 6.1.3.2
Python 3.9.1
java 16.0.1

pdf-reader

pdf-readerを使ってパースします。
pdf-reader

Gemfileに’pdf-reader’を追加します。

ファイル読み込み

URL読み込み

reader.pagesに各ページの情報が配列で入ります。

通常であればループして処理していきますが、今回はまだ解析段階なので、テーブルが存在する2ページ目を読み込みます。

2ページ目の読み込みデータ

こちらのデータを改行やスペースなどを考慮して読み取っていきますが、テーブル形式のPDFだとセル内で改行されている場合は複数行になってしまうため、単純な読み込みは難しそうです。

上記データを加工して次のような表示ができるようになりました。
複数の症状がある場合や、うまく分割できずに項目がずれるなど問題はありますが、専用ルールを作ればなんとか表示できそうです。

と思ったのですが。。。
よく見ると、摂取日と発生日が全く分割されておらず、さらにデータが欠けてしまっているようです。
これでは正しいデータを取得できないので、今回のケースでpdf-readerを使うのは諦めます。

PDFテーブル読み取り

他のRubyGemをいくつか試しましたが、テーブル情報をうまく取得するのは難しそうなので、PDFテーブル取得に特化したtabula-pyをPyCall経由で使いました。
詳細はこちら
PyCall
tabula-py

使い方は公式に書かれているとおりで、pdf-readerとやってることはほぼ同じです。
PDFテーブル読み込みに特化しているだけあって、pdf-readerよりも読み取り精度が高そうです。

データはバラバラですが文字も欠けておらず、かろうじて法則も存在しそうです。
症状名が長いと2行になって法則が変わったりとイレギュラー対応がかなり必要でしたが、こちらを加工して読み込むことができました。


※その後、6月23日公開分のPDFをインポートしましたが、そのまま読み込むことができず、大きく修正することとなってしまいました。

まとめ

今回はpdf-reader、tabula-pyを使って、読み込んだデータを加工して表示してみました。
企業で摂取するワクチンはモデルナ製ですが、ファイザーと同じmRNAワクチンなので、一つの判断材料になると思います。
※追記 モデルナも取り込むように対応しました。

このブログの記事だけでは表現した全てを伝えられないので、ブログ外とはなりますがメディアを作ってみましたので、宜しければご覧ください。
https://www.side-effect.jp
予防接種を検討している方がいましたらご活用ください。

今後も重要な文書がわかりやすく公開されるとは限らないので、政府が公開するPDFで興味があるものについて、わかりやすく表示していきたいと考えています。
皆様も興味のあるデータがありましたら、今回紹介した技術を使って読み取ってみると新たな発見があるかもしれません。

最後になりますが、新型コロナウイルス感染症の1日も早い収束を心よりお祈り申し上げます。