📄 align.pl
字号:
if (@status_tmp) { &fukugougo; # 剩圭胳借妄に掐る } ($status_str2, $result_str2, $refer_str2); }}sub dp { local($i, $j, %g, %d, %r); local($kx) = 0; local($del, $ins, $sub, $cor); for ($i = 1; $i <= $rcount; $i++) { for ($j = 1; $j <= $hcount; $j++) { if ($result[$j-1] eq $refer[$i-1]) { $d{$i,$j} = 0; } else { $d{$i,$j} = 1; } } } $g{0,0} = 0; $r{0,0} = 0; for ($i = 1; $i <= $rcount; $i++) { $g{$i,0} = $i; $r{$i,0} = 1; } for ($j = 1; $j <= $hcount; $j++) { $g{0,$j} = $j; $r{0,$j} = 2; } for ($i = 1; $i <= $rcount; $i++) { for ($j = 1; $j <= $hcount; $j++) { ($g{$i,$j}, $r{$i,$j}) = &set_node($g{$i-1,$j}+1, $g{$i,$j-1}+1, $g{$i-1,$j-1}+$d{$i,$j}); } } $i = $rcount; $j = $hcount; $kx = 0; for (;;) { if ($r{$i,$j} == 1) { $status[$kx] = "D"; $kekka_result[$kx] = ""; $kekka_refer[$kx] = $refer[$i-1]; $del++; $i--; } elsif ($r{$i,$j} == 2) { $status[$kx] = "I"; $kekka_result[$kx] = $result[$j-1]; $kekka_refer[$kx] = ""; $ins++; $j--; } elsif ($r{$i,$j} == 3) { if ($d{$i,$j} == 1) { $status[$kx] = "S"; $kekka_result[$kx] = $result[$j-1]; $kekka_refer[$kx] = $refer[$i-1]; $sub++; } elsif ($d{$i,$j} == 0) { $status[$kx] = "C"; $kekka_result[$kx] = $result[$j-1]; $kekka_refer[$kx] = $refer[$i-1]; $cor++; } else { print STDERR "error\n"; } $i--; $j--; } elsif ($i == 0 && $j == 0) { last; } $kx++; } ($kx, $cor, $sub, $del, $ins);}sub dp2 { local($i, $j, %g, %d, %r); for ($i = 1; $i <= $rcount2; $i++) { for ($j = 1; $j <= $hcount2; $j++) { if ($res_lines[$j-1] eq $ref_lines[$i-1]) { $d{$i,$j} = 0; } else { $d{$i,$j} = 1; } } } $g{0,0} = 0; $r{0,0} = 0; for ($i = 1; $i <= $rcount2; $i++) { $g{$i,0} = $i; $r{$i,0} = 1; } for ($j = 1; $j <= $hcount2; $j++) { $g{0,$j} = $j; $r{0,$j} = 2; } for ($i = 1; $i <= $rcount2; $i++) { for ($j = 1; $j <= $hcount2; $j++) { ($g{$i,$j}, $r{$i,$j}) = &set_node($g{$i-1,$j}+1, $g{$i,$j-1}+1, $g{$i-1,$j-1}+$d{$i,$j}); } } $i = $rcount2; $j = $hcount2; $kx2 = 0; for (;;) { if ($r{$i,$j} == 1) { $status2[$kx2] = "D"; $kekka_result2[$kx2] = ""; $kekka_refer2[$kx2] = $ref_lines[$i-1]; $del2++; $i--; } elsif ($r{$i,$j} == 2) { $status2[$kx2] = "I"; $kekka_result2[$kx2] = $res_lines[$j-1]; $kekka_refer2[$kx2] = ""; $ins2++; $j--; } elsif ($r{$i,$j} == 3) { if ($d{$i,$j} == 1) { $status2[$kx2] = "S"; $kekka_result2[$kx2] = $res_lines[$j-1]; $kekka_refer2[$kx2] = $ref_lines[$i-1]; $sub2++; } elsif ($d{$i,$j} == 0) { $status2[$kx2] = "C"; $kekka_result2[$kx2] = $res_lines[$j-1]; $kekka_refer2[$kx2] = $ref_lines[$i-1]; $cor2++; } else { print STDERR "error\n"; } $i--; $j--; } elsif ($i == 0 && $j == 0) { last; } $kx2++; } ($kx2);}sub set_node { local($a, $b, $c) = @_; if ($a <= $b) { if ($a <= $c) { return ($a, 1); } else { return ($c, 3); } } else { if ($b <= $c) { return ($b, 2); } else { return ($c, 3); } }}sub fukugougo { local($i, $j, %flag_ref, %flag_res, %same_ref, %same_res); local($count) = 0; local($rscount, $rfcount) = 0; local($prev_flag_ref, $prev_flag_res); local($ref_line, $res_line); local(@ref_lines, $res_lines); local(@status2, @kekka_refer2, @kekka_result2); $matubi = $#status_tmp; # どの婶尸を冯圭すればよいかラベリングする for ($i = 0; $i <= $matubi; $i++) { $count++; for ($j = 0; $j <= $matubi; $j++) { if ($kekka_refer_tmp[$i] =~ /$kekka_result_tmp[$j]/) { $res_word = $kekka_result_tmp[$j]; if ($flag_res{$j}) { ; } else { if (!$same_res{$res_word}) { $flag_res{$j} = $count; $same_res{$res_word} = $count; } elsif ($same_res{$res_word} != $count) { $flag_res{$j} = $count; $same_res{$res_word} = $count; } else { last; } } } } } # どの婶尸を冯圭すればよいかラベリングする for ($i = 0; $i <= $matubi; $i++) { $count++; for ($j = 0; $j <= $matubi; $j++) { if ($kekka_result_tmp[$i] =~ /$kekka_refer_tmp[$j]/) { $ref_word = $kekka_refer_tmp[$j]; if ($flag_ref{$j}) { ; } else { if (!$same_ref{$ref_word}) { $flag_ref{$j} = $count; $same_ref{$ref_word} = $count; } elsif ($same_ref{$ref_word} != $count) { $flag_ref{$j} = $count; $same_ref{$ref_word} = $count; } else { last; } } } } } # ラベリング冯蔡に辫って、婶尸帽胳误を冯圭する for ($i = 0; $i <= $matubi; $i++) { if ($flag_res{$i}) { $rscount++; if ($rscount == 1 || $prev_flag_res == $flag_res{$i}) { $res_line .= $kekka_result_tmp[$i]; } elsif ($flag_res{$i} < $prev_flag_res) { $res_line .= " " . $kekka_result_tmp[$i] . " "; } else { $res_line .= " " . $kekka_result_tmp[$i]; } $prev_flag_res = $flag_res{$i}; } else { $rscount = 0; $res_line .= " " . $kekka_result_tmp[$i] . " "; } if ($flag_ref{$i}) { $rfcount++; if ($rfcount == 1 || $prev_flag_ref == $flag_ref{$i}) { $ref_line .= $kekka_refer_tmp[$i]; } elsif ($flag_ref{$i} < $prev_flag_ref) { $ref_line .= " " . $kekka_refer_tmp[$i] . " " ; } else { $ref_line .= " " . $kekka_refer_tmp[$i]; } $prev_flag_ref = $flag_ref{$i}; } else { $rfcount = 0; $ref_line .= " " . $kekka_refer_tmp[$i] . " "; } } @res_lines = split(' ', $res_line); @ref_lines = split(' ', $ref_line); $rcount2 = $#ref_lines + 1; $hcount2 = $#res_lines + 1; $ref2 += $rcount2; $hyp2 += $hcount2; ($kx2) = &dp2; # 冯圭稿、浩びアラインメントを艰る # 粕みでアラインメントを艰った冯蔡、驶淡粕みの婶尸で弥垂疙りに # なっているところについて、赖豺冉年をやり木す。 # (驶淡の面に赖豺が崔まれていれば、OKとする。) for ($i = $kx2 - 1; $i >= 0; $i--) { if ($status2[$i] eq "S") { if ($kekka_result2[$i] =~ /\{.+\}/ && $kekka_refer2[$i] =~ /\{.+\}/) { $kekka_result2[$i] =~ /(.*)\{(.+)\}(.*)/; $result_head = $1; $result_yomi = $2; $result_tail = $3; @resyomis = split('\/', $result_yomi); $kekka_refer2[$i] =~ /(.*)\{(.+)\}(.*)/; $refer_head = $1; $refer_yomi = $2; $refer_tail = $3; @refyomis = split('\/', $refer_yomi); foreach $resyomi (@resyomis) { if ($result_head) { $resyomi = $result_head . $resyomi; } if ($result_tail) { $resyomi = $resyomi . $result_tail; } foreach $refyomi (@refyomis) { if ($refer_head) { $refyomi = $refer_head . $refyomi; } if ($result_tail) { $refyomi = $refyomi . $refer_tail; } $status2[$i] = "C" if $resyomi eq $refyomi; } } } elsif ($kekka_result2[$i] =~ /\{.+\}/ && $kekka_refer2[$i] !~ /\{.+\}/) { $kekka_result2[$i] =~ /(.*)\{(.+)\}(.*)/; $result_head = $1; $result_yomi = $2; $result_tail = $3; @resyomis = split('\/', $result_yomi); $ref_yomi = $kekka_refer2[$i]; foreach $resyomi (@resyomis) { if ($result_head) { $resyomi = $result_head . $resyomi; } if ($result_tail) { $resyomi = $resyomi . $result_tail; } $status2[$i] = "C" if $resyomi eq $ref_yomi; } } elsif ($kekka_result2[$i] !~ /\{.+\}/ && $kekka_refer2[$i] =~ /\{.+\}/) { $res_yomi = $kekka_result2[$i]; $kekka_refer2[$i] =~ /(.*)\{(.+)\}(.*)/; $refer_head = $1; $refer_yomi = $2; $refer_tail = $3; @refyomis = split('\/', $refer_yomi); foreach $refyomi (@refyomis) { if ($refer_head) { $refyomi = $refer_head . $refyomi; } if ($refer_tail) { $refyomi = $refyomi . $refer_tail; } $status2[$i] = "C" if $refyomi eq $res_yomi; } } else { ; } } } for ($i = $kx2 - 1; $i >= 0; $i--) { local($hlen, $rlen, $lngth, $format2); $hlen = length($kekka_result2[$i]); $rlen = length($kekka_refer2[$i]); $lngth = $hlen > $rlen ? $hlen : $rlen; $format2 = "%-" . $lngth . "s "; $status_str2 .= sprintf($format2, $status2[$i]); $result_str2 .= sprintf($format2, $kekka_result2[$i]); $refer_str2 .= sprintf($format2, $kekka_refer2[$i]); } $check_s = ""; undef(@status_tmp); undef(@kekka_result_tmp); undef(@kekka_refer_tmp);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -