my $opt_errors_wait_key;
my $opt_tee;
my $opt_fast;
+my $opt_cycle=10;
$Getopt::Long::ignorecase=0;
$Getopt::Long::bundling=1;
"errors-wait-key"=>\$opt_errors_wait_key, # Only for -w|--wrong.
"tee!" =>\$opt_tee, # Output all the read lines. Only for -w|--wrong.
"fast!" =>\$opt_fast,
+ "cycle=s" =>\$opt_cycle,
);
$opt_log||=$opt_edict.".log";
my @R;
my %identify;
my %kana_to_r;
+my $result_count=0;
+
+sub siglog($)
+{
+ my($a)=@_;
+
+ return 0 if !$a;
+ my $sig=($a>0)-($a<0);
+ return $sig*log(abs $a);
+}
sub schedule($$%)
{
my($r,$exam_from,%args)=@_;
+ return if $r->{"orig"}=~/\Q(laceno)\E/;
my $time=$args{"time"}||time();
my $sum=0;
for my $result (@{$r->{"result"}}) {
# 1/log(2+$age): big.. big importance
# 1/log(2+$age): 0..small importance
$sum+=1/log(2+$age)*$ok{$result->{"ok"}};
+ if (!$result->{"ok"}) {
+ my $count_diff=$result_count-$result->{"count"};
+ $count_diff-=$opt_cycle;
+ $sum-=siglog($count_diff);
+ }
}
+ my $scale=1;
+ if ($r->{"pri"}) {
+ my $abspri=$r->{"pri"};
+ $abspri=1/(-$abspri) if $abspri<0;
+ $abspri=2 if $abspri<2;
+ $scale=log($abspri)*($r->{"pri"}<0 ? -1 : +1);
+ }
my $arr=[];
if ($T->exists($sum)) {
$arr=$T->select($sum)->{"arr"};
." exam_from=$exam_from ok=$ok: ".identify($r)."\n";
close LOG_APPEND or die "close \"$opt_log\": $!";
}
-
+ $args{"time"}||=time();
push @{$r->{"result"}},{
- "time"=>time(),
+ "time"=>$args{"time"},
"exam_from"=>$exam_from,
"ok"=>$ok,
+ "count"=>$result_count++,
};
}
$r->{"kana"}=$r->{"kanji"};
delete $r->{"kanji"};
}
+ $rest=~s{^(|.*/)[(]pri([+-]\d+)[)]/}{$r->{"pri"}=$2;$1;}e;
while ($rest) {
$rest=~s{^\s*([^/]+?)\s*/}{}
or do { warn "Unparsable english: $s\n"; $errors_wait_key_count++; return; };
);
while (<EDICT>) {
my $r=edict_line_parse() or next;
- next if /\Q(laceno)\E/;
push @R,$r;
push @{$kana_to_r{$r->{"kana"}}},$r;
keys(%check);
my $gmtime=$localtime-($zonepm."1")*($zonehour*60+$zoneminute);
my $r=$identify{$identify}
or do { warn "Word not found from line: $_\n"; next; };
- result $r,$exam_from,$ok,"write"=>0;
+ result $r,$exam_from,$ok,"write"=>0,"time"=>$gmtime;
}
close LOG_READ or die "close \"$pathname\": $!";
}