X-Git-Url: https://git.jankratochvil.net/?p=nethome.git;a=blobdiff_plain;f=src%2Fjaxam;h=1c0b62caff92fd590a17d93606087f53ebc66293;hp=713e8268a62a81620a4090e8b9dd95c6641fee7f;hb=271bd12bf3ce2bbf0e03fa5fe2bec93840d2c247;hpb=c5f854a856abf1b005a8d8bcfa6a8ce24304ea60 diff --git a/src/jaxam b/src/jaxam index 713e826..1c0b62c 100755 --- a/src/jaxam +++ b/src/jaxam @@ -1,8 +1,6 @@ #! /usr/bin/perl # # $Id$ -# for .vimrc: -# noremap V:!~/src/jaxam --wrong --tee --errors-wait-key use strict; @@ -24,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; @@ -35,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"; @@ -51,11 +51,22 @@ 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($$%) { 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"}}) { @@ -71,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"}; @@ -139,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++, }; } @@ -176,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; }; @@ -212,7 +237,6 @@ sub edict_read($) ); while () { my $r=edict_line_parse() or next; - next if /\Q(laceno)\E/; push @R,$r; push @{$kana_to_r{$r->{"kana"}}},$r; keys(%check); @@ -253,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\": $!"; }