8 return int(-log($prob) * $FACTOR);
12 my $n = ord(shift @_);
13 return 1 if ($n >= 0x30A1 && $n <= 0x30AA);
14 return 2 if ($n >= 0x30AB && $n <= 0x30B4);
15 return 3 if ($n >= 0x30B5 && $n <= 0x30BE);
16 return 4 if ($n >= 0x30BF && $n <= 0x30C9);
17 return 5 if ($n >= 0x30CA && $n <= 0x30CE);
18 return 6 if ($n >= 0x30CF && $n <= 0x30DD);
19 return 7 if ($n >= 0x30DF && $n <= 0x30E2);
20 return 8 if ($n >= 0x30E3 && $n <= 0x30E8);
21 return 9 if ($n >= 0x30E9 && $n <= 0x30ED);
22 return 0 if ($n >= 0x30EE && $n <= 0x30F3);
23 return 0 if ($n == 0x30FC);
32 my ($freq, $s) = split;
34 my $length = length($s);
37 push @list, [ (-1, "_") ];
38 for (my $i = 0; $i < $length; ++$i) {
39 my $k = substr($s, $i, 1);
40 my $n = &char2num($k);
42 goto NEXT if ($n == -1);
43 push @list, [ ($n, $k) ];
46 push @list, [ (-1, "_") ];
48 for (my $i = 0; $i < $#list; ++$i) {
49 my ($n0, $w0) = @{$list[$i]};
50 my ($n1, $w1) = @{$list[$i+1]};
52 $e2{$w0}{$w1} += $freq;
66 open (S, "> dic.csv") || die;
70 my $n = &char2num($k);
72 printf S "%s,%d,%d,0,%s\n", $n, $e3{$w0}, $e3{$w0}, $w0;
76 open(S, "> matrix.def") || die;
77 my $size = scalar keys %e3;
78 print S "$size $size\n";
79 my @l = sort keys %e3;
81 my $f1 = $e1{$w0} || 0.0;
83 my $f2 = $e2{$w0}{$w1} || 0.0;;
84 my $c = &toCost(1.0 * ($f2 + 0.5) / ($f1 + $size * 0.5));
85 printf S "%d %d %d\n", $e3{$w0}, $e3{$w1}, $c;