X-Git-Url: https://git.jankratochvil.net/?a=blobdiff_plain;f=src%2Fjaxam;h=1c0b62caff92fd590a17d93606087f53ebc66293;hb=49518a42d25781a69ecc7ddf2e870a0411fa6981;hp=82feb45e1845fbd7f310dd3e398b08bb4a48b16e;hpb=48df1dfb8575e06ec8be71822df46e3c7cea55b2;p=nethome.git diff --git a/src/jaxam b/src/jaxam index 82feb45..1c0b62c 100755 --- a/src/jaxam +++ b/src/jaxam @@ -22,6 +22,7 @@ my $opt_wrong; my $opt_errors_wait_key; my $opt_tee; my $opt_fast; +my $opt_cycle=10; $Getopt::Long::ignorecase=0; $Getopt::Long::bundling=1; @@ -33,6 +34,7 @@ die if !GetOptions( "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"; @@ -49,6 +51,16 @@ my $T; 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($$%) { @@ -70,6 +82,11 @@ sub schedule($$%) # 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"}) { @@ -145,11 +162,12 @@ sub result($$$%) ." 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++, }; } @@ -182,8 +200,7 @@ sub edict_line_parse(;$) $r->{"kana"}=$r->{"kanji"}; delete $r->{"kanji"}; } - $rest=~s{^(|.*/)[(]pri([+-]\d+)[)]/}{$1}; - $r->{"pri"}=$2 if $2; + $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; }; @@ -260,7 +277,7 @@ sub log_read($) 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\": $!"; }