用于对齐语料库的Perl脚本

时间:2014-02-27 07:04:40

标签: perl

所以我试图找出这个perl脚本的作用。

use FindBin qw($Bin);
use strict;
use Encode;

binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");

chdir($Bin);
my $dir = "txt";
my $outdir = "aligned";
my $preprocessor = "$Bin/tools/split-sentences.perl -q";

my ($l1,$l2) = @ARGV;
die unless -e "$dir/$l1";
die unless -e "$dir/$l2";

`mkdir -p $outdir/$l1-$l2/$l1`;
`mkdir -p $outdir/$l1-$l2/$l2`;

my ($dayfile,$s1); # globals for reporting reasons
open(LS,"ls $dir/$l1|");
while($dayfile = <LS>) {
  chop($dayfile);
  if (! -e "$dir/$l2/$dayfile") {
    print "$dayfile only for $l1, not $l2, skipping\n";
    next;
  }
  &align();
}

从这看起来我需要运行

perl sentence-align-corpus.perl europarlEnglishCorpus.txt europarlSpanishCorpus.txt

这两个文件位于txt文件夹中。

运行上面给我

txt/europarlEnglishCorpus.txt only for europarlEnglishCorpus.txt, not europarlSpanishCorpus.txt, skipping

并且没有对齐句子,它只是创建目录。看起来如果被触发,但我不确定它是做什么的。

这个脚本有什么作用?

3 个答案:

答案 0 :(得分:2)

命令行参数是目录。该计划希望在txt/p1txt/p2中找到文件(其中p1p2是传递的参数)。

它检查txt/p1中的所有文件,如果txt/p2中没有相同名称的文件,则会打印出错误消息,或者调用align子例程。

您可能会得到您看到的结果,因为txt/europarlEnglishCorpus.txttxt/europarlSpanishCorpus.txt/europarlEnglishCorpus.txtls没有。

出现混淆是因为程序通过shell {{1}}来列出目录,它将文件名或目录名作为参数。

除此之外我无法帮助你。

答案 1 :(得分:2)

程序在与.pl文件相同的目录中假设以下输入

txt/
  lang-a/
     day-1
     day-2
  lang-b/
     day-1
     day-2
  lang-c/
     day-1
     day-2

然后将其作为

运行

./ sentence-align-corpus.perl lang-a lang-b

我认为下载http://www.statmt.org/europarl/下提到的文件可能很有用。

本网站上有指示。这些可能会有所帮助,也可能没有帮助,但我希望您在向SO寻求帮助之前先阅读这些内容。

  

有关此语料库的详细说明,请阅读:

     
      
  • Europarl:统计机器翻译平行语料库,Philipp Koehn,MT Summit 2005,pdf。

  •   
  • 如果您在工作中使用此语料库,请引用该论文。也可以看看   报告的扩展(但更早)版本(ps,pdf)。

  •   

我坚持我的原始建议,通过电子邮件发送网站上提供的地址,并要求更好地说明您需要下载什么(如果有的话),如何运行以及它的目标是什么。

答案 2 :(得分:1)

看起来你给这个脚本的第二个参数(即europarlSpanishCorpus.txt)是错误的,它希望它是名为txt的目录下的一个目录。