自分の日記で声優さんへの言及数を調べる

こないだ作ったリストを使って、自分の日記から声優さんの言及数を調べる。

use strict;
use warnings;

my $list   = shift;
my $export = shift;
my $fh;

open $fh, '<', $list or die;
my @sylist = map{(split(/\t/))[0]} <$fh>;
close $fh;

my $re = eval 'qr/(' . join('|', @sylist) . ')/';
### $re;

open $fh, '<', $export or die;
my @data = <$fh>;
close $fh;

my %count;
foreach my $l (@data){ ### loop [===  ] %
  $count{$1}++ while $l =~ /$re/g;     ## fast
#  foreach my $name (@sylist){         ## slow
#    $count{$name}++ if $l =~ /$name/;
#  }
}
### %count

foreach (sort {$count{$b} <=> $count{$a}} keys %count){
  print "$count{$_}\t$_\n";
}

あらかじめ正規表現コンパイルしておくのが高速化のコツで、特に今回みたいに大きなリストを大きなデータにかける場合はメチャメチャ早くなる。具体的には、## slow 部分のコードを使うと30分かかる*1のが、## fast部分にすると2秒で終わる。
んで、結果。2009年分のダイアリーに対して実行すると・・・

49	豊崎愛生
47	藤村歩
45	堀江由衣
42	戸松遥
32	仙台エリ
32	高垣彩陽
23	悠木碧
21	阿澄佳奈
19	伊藤静
18	平野綾
..
..

へえー。その他の方はともかく、そんなに豊崎愛生の話してたっけなあ・・・。もちろん好きは好きだけど、ことさら言及した記憶はないんだよなあ。それだったら藤村歩の方がよっぽど語ってると思ってたよ。

*1:Smart::Commentsの申告によると、そうらしい。めんどいので未確認ですが・・・