2020年5月2日土曜日

WHOのSituation reports

WHOがCOVID-19の特設ページで毎日掲載しているSituation reportsの様式が,5月1日版から模様替えした。なんでもいいからCSVで出してほしい。日本の厚生労働省とかわらないのか。

これまでは,もとのpdfファイルから,pdftotext(コマンドラインツール)でテキストにしたものと, PDFelement6 Pro(無料版)でエクセル化したものとを組み合わせて,国・地域別データを整理した日次統計テキストファイルをつくっていた。

新しい様式ではpdftotextの出力がちょっとましな感じだったので,perlプログラミング1発+若干の手作業による修正で,上記の日次統計テキストファイルまでたどり着くことができそうだ。

いや,Johns Hopkins 大学のCSVデータを使えという話もあるかもしれないが,いちおうそこはほれ,WHOを支持しているので。

あいかわらず正規表現もまともに習得していないので泥臭いperlプログラムになった。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# /usr/local/bin/perl
# 05/02/2020 K. Koshigiri 
# 05/07/2020 K. Koshigiri -> revised version
# extract data from WHO covid-19 reports
# https://www.who.int/emergencies/diseases/
# novel-coronavirus-2019/situation-reports/
# usage:: ./who.pl < pdf-in.txt > out.txt

while($line = <STDIN>) {
  chomp($line);
  if($line =~ /([A-Z].*)/) {
    $a=$1;
    $a =~ s/\(.*//;
    $flg='a';
  } elsif($flg eq 'a' && $line =~ /([\d\h]+)/) {
    $b=$1;
    $b =~ s/\h//;
    $flg='b';
  } elsif($flg eq 'b' && $line =~ /([\d\h]+)/) {
    $c=$1;
    $c =~ s/\h//;
    $flg='c';
  } elsif($flg eq 'c' && $line =~ /([\d\h]+)/) {
    $d=$1;
    $d =~ s/\h//;
    $flg='d';
  } elsif($flg eq 'd' && $line =~ /([\d\h]+)/) {
    $e=$1;
    $e =~ s/\h//;
    $flg='';
    print("$a\n$b\n$c\n$d\n$e\n");
  }
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
※WHOのデータ形式が変わったので,若干修正した(2020.5.7)。

0 件のコメント: