はじめに
GMOアドマーケティングの吉岡です。
皆さんは気になる情報があった場合、政府公開文書を調べたりするでしょうか?
GMOインターネットグループでも2021年6月21日より新型コロナウィルスのワクチン摂取が開始となりますが、厚生労働省が公開している資料を確認してみたところ、接種を受ける際の同意という項目に次ような文章がありました。
1 2 |
予防接種を受ける方には、予防接種による感染症予防の効果と副反応のリスクの双方について理解した上で、 自らの意志で接種を受けていただいています。 |
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’を追加します。
1 |
gem 'pdf-reader' |
ファイル読み込み
1 2 3 4 5 6 |
reader = PDF::Reader.new("somefile.pdf") puts reader.pdf_version puts reader.info puts reader.metadata puts reader.page_count |
URL読み込み
1 2 3 4 5 |
require 'open-uri' io = open('https://www.mhlw.go.jp/content/10906000/000790066.pdf') reader = PDF::Reader.new(io) puts reader.info |
reader.pagesに各ページの情報が配列で入ります。
1 2 3 4 5 6 7 |
reader = PDF::Reader.new("somefile.pdf") reader.pages.each do |page| puts page.fonts puts page.text puts page.raw_content end |
通常であればループして処理していきますが、今回はまだ解析段階なので、テーブルが存在する2ページ目を読み込みます。
1 |
puts reader.pages[1].text |
2ページ目の読み込みデータ
1 2 3 4 5 6 7 8 9 10 |
3.報告症例一覧(医療機関からの報告) 報告日 2021年2月17日~2021年5月2日\n \n 2021年5月2日現在\n 報告数(n=5561)\n \n 接種から\n No 年齢 性別 接種日 発生日 発生までの ワクチン名 製造販売業者 ロット番 症状名(PT名) 因果関係 重篤度 転帰日 転帰内容\n 日数 号 (報告医評価) (報告医評価)\n \n 2021/03/19\r 口腔咽頭不快感(口腔咽頭不快感)\r 未記入\r 不明\n 1 55歳 女性 2021/03/12021/03/19 0 コミナティ筋注 ファイザー EP9605皮疹・発疹・紅斑(紅斑) 重くない 未記入 軽快\n\n |
こちらのデータを改行やスペースなどを考慮して読み取っていきますが、テーブル形式の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日も早い収束を心よりお祈り申し上げます。