こないだ作ったリストを使って、自分の日記から声優さんの言及数を調べる。
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の申告によると、そうらしい。めんどいので未確認ですが・・・