100分求一段perl代码改为python或.NET

menuvb 2011-01-13 04:42:51
#!/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( <WORDS> )
{
chomp;
$wnum++;
@wk = split;
$wordkey{$wk[1]} = $wk[0];
}
print HMM "M= $wnum\n";
close WORDS;

%poskey = {};
$pnum = 0;
while( <POS> )
{
chomp;
$pnum++;
@pk = split;
$poskey{$pk[1]} = $pk[0];#4 vb
}
print HMM "N= $pnum\n";
close POS;

@unipos = ();
@bipos = ();
while ( <NGRAM> )
{
chmop;
@png = split;
$n = @png;
if ( $n == 2 )
{
$unipos[$poskey{$png[0]}] = $png[1];#vb 100
}
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 ( <LEX> )
{
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";

大概100行左右的perl,因为需要了解这段代码的意思,可以改为python或.NET。主要不理解perl中%wordkey = {}指什么类型?

$poskey{$pk[1]} = $pk[0];又有什么用处,好像perl的数据也是用[]用表达的。
非常感谢!
...全文
96 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shyokou 2011-01-17
  • 打赏
  • 举报
回复
好严厉呀 ... 这种貌似 BI 的东东不少都是这样的呢 ...

[Quote=引用 2 楼 iambic 的回复:]

垃圾代码。自己直接闭眼重写吧。有必要一行行复刻吗?
[/Quote]
codesnail 2011-01-17
  • 打赏
  • 举报
回复
这种移植没有意义。。。
wudiliusha 2011-01-17
  • 打赏
  • 举报
回复
还是理解了意思和原理再重写个python吧,python只要理解了功能是很好写的
fibbery 2011-01-16
  • 打赏
  • 举报
回复
没看你的代码。

没有一种语言可以一字一句的对等翻译。但是,如果想将一种语言写的程序,用另一个语言重写,那么首先要了解程序的功能,然后,用另一种语言实现改程序的功能。

也就是说,你的程序,Perl是如何实现的,对你来说根本不重要,程序实现了什么功能才是最重要的,其次就是如何用Python实现罢了。
iambic 2011-01-13
  • 打赏
  • 举报
回复
垃圾代码。自己直接闭眼重写吧。有必要一行行复刻吗?
看着奢扣 2011-01-13
  • 打赏
  • 举报
回复
那个是哈希结构 你是不是应该把参数那几个文件里的东东贴出来啊?

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧