X-Git-Url: https://git.jankratochvil.net/?a=blobdiff_plain;f=src%2Fjaxam;h=1c0b62caff92fd590a17d93606087f53ebc66293;hb=b1ccf302bd559f34ab0eb9642f756477ee525e7a;hp=821d25a99b304ad829c5fa9cb45ac1d34b71d8b9;hpb=51a4c6abb7836aa58f9cf665a3ecc6213a05c081;p=nethome.git diff --git a/src/jaxam b/src/jaxam index 821d25a..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,7 +82,19 @@ 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"}) { + 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"}; @@ -138,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++, }; } @@ -175,6 +200,7 @@ sub edict_line_parse(;$) $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; }; @@ -251,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\": $!"; }