我想用ROUGE分析我的摘要。到目前为止,我已经编写了一个perl脚本来在命令行上运行ROUGE,这是我到目前为止所做的:
#!/usr/bin/perl
use warnings;
use Cwd;
$curdir=getcwd;
$ROUGE="/ROUGE-1.5.5.pl";
chdir("sample-test");
$cmd="$ROUGE -e /data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a DUC2002ROUGE.in.26.spl.xm> /sample-output/salam.out";
print $cmd,"\n";
system($cmd);
chdir($curdir);
但是我收到了这个错误:
系统无法找到指定的路径
答案 0 :(得分:5)
系统无法找到指定的路径
您的脚本路径错误,/ROUGE-1.5.5.pl
不存在,因此system()
调用的shell正在抱怨。
答案 1 :(得分:5)
问题是/ROUGE-1.5.5.pl
是一个绝对文件路径,表示该文件位于根目录中。你说它与正在运行的Perl程序位于同一目录中,因此你需要./ROUGE-1.5.5.pl
或ROUGE-1.5.5.pl
这个程序修复了问题并插入了一些漏洞。我使用abs_path
中的Cwd
函数将程序,数据,输入和输出名称转换为绝对路径;执行隐式检查文件存在,并让我避免只会混淆事物的chdir
。我还为system
添加了一个粗略的诊断,以提供一些暗示
#!/usr/bin/perl
use strict;
use warnings 'all';
use Cwd qw/ getcwd abs_path /;
my $ROUGE = abs_path('ROUGE-1.5.5.pl');
my $data = abs_path('data');
my $input = abs_path('sample-test/DUC2002ROUGE.in.26.spl.xm');
my $output = abs_path('sample-output/salam.out');
my $cmd = qq{"$ROUGE" -e "$data" -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a "$input" > "$output"};
print $cmd, "\n";
system($cmd) == 0 or die qq{system() failed: $?};
答案 2 :(得分:2)
如果您希望将ROUGE输出存储在文件中而不是打印到命令行或终端,我相信我有答案。
您不需要perl脚本,您可以从命令行运行ROUGE。要输出到文件,请将> results.txt
添加到命令的末尾。
运行类似这样的内容将输出到命令行:
perl ROUGE-1.5.5.pl -e data -n 4 -w 1.2 -m -2 4 -u -c 95 -r 1000 -f A -p 0.5 -t 0 -a -d settings.xml
然而,这将输出到名为results.txt的文件:
perl ROUGE-1.5.5.pl -e data -n 4 -w 1.2 -m -2 4 -u -c 95 -r 1000 -f A -p 0.5 -t 0 -a -d settings.xml > results.txt
答案 3 :(得分:2)
你有一些错误的文件路径和一些拼写错误,但这有效:
#!/usr/bin/perl
use warnings;
use Cwd;
$curdir=getcwd;
$ROUGE="../ROUGE-1.5.5.pl";
chdir("sample-test");
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a DUC2002-ROUGE.in.26.spl.xml > ../sample-output/salam.out";
print $cmd,"\n";
system($cmd);
chdir($curdir);
但是当你可以在命令行中输入一个perl脚本来运行ROUGE时,为什么呢?
perl ROUGE-1.5.5.pl -e data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a sample-test/DUC2002-ROUGE.in.26.spl.xml > sample-output/salam.out
答案 4 :(得分:1)
我同意关于绝对路径和相对路径的其他答案。我也同意为什么使用Perl时可以将其作为一个简单的命令行参数。但是,我要转过来说,如果您打算使用Perl来做这件事,请让它有机会记录您正在做的事情,以便将来更容易调整,像:
use strict;
use warnings;
use Cwd;
my $curdir = getcwd;
use constant ROUGE => '../ROUGE-1.5.5.pl';
my @OPTIONS = ('-2', '-1', '-U', # use skip-bigrams and compute unigram scores (not sure -1 is valid)
'-e' => '../data', # data directory
'-c' => 95, # confidence interval (default)
'-r' => 1000, # sampling points (default)
'-n' => 4, # max-ngram length
'-w' => 1.2, # LCS weight
'-a' => 'DUC2002-ROUGE.in.26.spl.xml'
);
if (chdir("sample-test")) {
my $cmd = join(" ", ROUGE, @OPTIONS, "> ../sample-output/salam.out");
print STDERR $cmd, "\n";
system($cmd);
chdir($curdir);
}
答案 5 :(得分:-1)
我想你想在windows中使用rouge评估summerization。我建议你使用ubuntu
版本的linux并安装rouge并使用这个命令得到你的输出:
我的意思是将此文件保存为perl文件,并在linux终端中执行此文件
#!/usr/bin/perl -w
use Cwd;
$curdir=getcwd;
$ROUGE="../ROUGE-1.5.5.pl";
chdir("sample-test");
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a -m ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a-m.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -a -m -s ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-a-m-s.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -a ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -a -m ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a-m.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -l 10 -a -m -s ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-l10-a-m-s.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -a ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -a -m ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a-m.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -c 95 -2 -1 -U -r 1000 -n 4 -w 1.2 -b 75 -a -m -s ROUGE-test.xml > ../sample-output/ROUGE-test-c95-2-1-U-r1000-n4-w1.2-b75-a-m-s.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -3 HM -z SIMPLE DUC2002-BE-F.in.26.lst 26 > ../sample-output/DUC2002-BE-F.in.26.lst.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -3 HM DUC2002-BE-F.in.26.simple.xml 26 > ../sample-output/DUC2002-BE-F.in.26.simple.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -3 HM -z SIMPLE DUC2002-BE-L.in.26.lst 26 > ../sample-output/DUC2002-BE-L.in.26.lst.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -3 HM DUC2002-BE-L.in.26.simple.xml 26 > ../sample-output/DUC2002-BE-L.in.26.simple.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -n 4 -z SPL DUC2002-ROUGE.in.26.spl.lst 26 > ../sample-output/DUC2002-ROUGE.in.26.spl.lst.out";
print $cmd,"\n";
system($cmd);
$cmd="$ROUGE -e ../data -n 4 DUC2002-ROUGE.in.26.spl.xml 26 > ../sample-output/DUC2002-ROUGE.in.26.spl.out";
print $cmd,"\n";
system($cmd);
chdir($curdir);
答案 6 :(得分:-4)
如果在Windows上运行dos命令
perl perlscript.pl