#!/usr/bin/perl ( $words, $pos, $ngram, $lex, $hmm ) = @ARGV; open WORDS, $words or die "Can not open the $words file!\n"; open POS, $pos or die "Can not open the $pos file!\n"; open NGRAM, $ngram or die "Can not open the $ngram file!\n"; open LEX, $lex or die "Can not open the $lex file!\n"; open HMM, " > $hmm " or die "Can not open the $hmm file\n"; %wordkey = {}; $wnum = 0; while( ) { chomp; $wnum++; @wk = split; $wordkey{$wk[1]} = $wk[0]; } print HMM "M= $wnum\n"; close WORDS; %poskey = {}; $pnum = 0; while( ) { chomp; $pnum++; @pk = split; $poskey{$pk[1]} = $pk[0]; } print HMM "N= $pnum\n"; close POS; @unipos = (); @bipos = (); while ( ) { chmop; @png = split; $n = @png; if ( $n == 2 ) { $unipos[$poskey{$png[0]}] = $png[1]; } if ( $n == 3 ) { $bipos[$poskey{$png[0]}][$poskey{$png[1]}] = $png[2]; } } close NGRAM; print HMM "A:\n"; foreach $i ( 1..$pnum ) { foreach $j ( 1..$pnum ) { $p = ( $bipos[$i][$j] + 1 ) / ( $unipos[$i] + $pnum ) ; printf HMM ("%5.4f ", $p); } print HMM "\n"; } print HMM "B:\n"; @wordpos = (); while ( ) { chmop; @wpn = split; $wordpos[$poskey{$wpn[1]}][$wordkey{$wpn[0]}] = $wpn[2]; } close LEX; foreach $i ( 1..$pnum ) { foreach $j ( 1..$wnum ) { $p = ( $wordpos[$i][$j] + 1 ) / ( $unipos[$i] + $wnum ) ; printf HMM ("%5.4f ", $p); } print HMM "\n"; } print HMM "pi:\n"; $sum = 0; shift ( @unipos ); foreach $n ( @unipos ) { $sum += $n; } foreach $n ( @unipos ) { $p = $n / $sum; printf HMM ("%5.4f ", $p); } print HMM "\n";