#! /usr/bin/perl use locale; ###################################################### # na wejściu znajduje się plik zawierający linie # # postaci: # # slowo;opis # # # # na wyjściu ma się znaleźć plik zawierający linie: # # końcówka(rev);prawdopodobieństwo;opis # # gdzie: # # - końcówka(rev) jest końcówką wyrazu zapisaną # # w odwrotnej kolejności, dla każdego wyrazu # # w słowniku wypisujemy końcówki o długościach # # od 1 do długości wyrazu, # # - prawdopodobieństwo jest prawdopodobieństwem # # wystąpienia danego opisu dla danej końcówki # # (obliczonym na podstwie statystycznej analizy # # słownika), np: 250 oznacza, ze opis popjawia sie # # 1 raz na 4 wystąpienia końcówki. # # Zapisana zostaje odwrotność prawdopodobieństwa # # aby scieżka najbardziej prawdopodobna miała # # najmniejszy koszt. # ###################################################### ###### #STALE # # Jak bardzo prawdopodobna musi być dana ścieżka, aby # brać ją pod uwagę? (w promilach) $MIN_PROB = 0; # # Maksymalna ilość powtórzeń danej końcówki (brane od # najbardziej prawdopodbnej w dół $MAX_PATH = 10; # ###### @input = <>; #$max = 0; #for $m (@input) { # $m =~ /(\w+);.*$/; # if (length($1) > $max) { # $max = length($1); # } #} $n = 1; #$max; $go = 1; while ($n<7) { my %prefiksy; my $sumy; $go = 0; for $m (@input) { if ($m =~ /^(\w{$n})\w*;(.*)$/) { $go = 1; $prefiksy{$1.";".$2}++; $sumy{$1}++; } } print "\n"; for $prefiks (keys %prefiksy) { $prefiks =~ /^(.*);(.*)$/; $p = $prefiksy{$prefiks} / $sumy{$1}; $p *= 1000; #wartosc w promilach if ($p <= $MIN_PROB) { next; } #if ($p == 1000) { # $p--; #} $p = 1000 - $p; #odwrotnosc # $rev = reverse($1); # opakowujemy znak '-' znakami [] ;) $opis = $2; $opis =~ s/-/\[-\]/; printf "%s~%.0f;%s\n", $1, $p, $opis; } $n++; }