[求助]PERL语言编程技术

[求助]PERL语言编程技术

我想编写一个有关字符串的匹配问题的程序
例如,在中文文章中找到与"才能"或"才/[a-zA-Z] 能/[a-zA-Z]"匹配的词后,前此词的前、后6位连成句子输入字符串。
我编写的程序my $juzi=$qian." ".$hou."";
则对于"才/[a-zA-Z] 能/[a-zA-Z]"的情况,最后做测试的时候中间会出现两个空格,而"才能"则为一个...
请问我应该如何编写,用一个词代替匹配的位置,让它做为一个词出现?
谢谢了。
说实话,我看了半天没看懂你要表达什么
你好!

我在做一个关于组合歧义的问题。
我编写的程序是从中文文本中找到与“才能”和“才 能”相匹配的句子并输出。
这是我现在编写好了的程序,只要匹配词的前后6位,并将它们连成一个字符串输出做测试。

可是现在我遇到的问题是,如果直接将前后词相连,测试时“才 能”相当于两个空格,“才能”相当于一个空格,这样我的特征值个数就不一样了
我就想找一个方法,比如例用“AA”来代“才能”和“才 能”,使它们当做一个位置进行输出
这是我用来连接的词句my $juzi=$qian." ".$hou."";

谢谢指教!


#!user/bin/perl

my $he;
my $fen;
my $string;
my @line;
my $jieguo;
my $tt1="才";
my $tt3="能";
my $tt2="才能";

open(Filein,"c:\\199801.txt"||die"can't open";
while(<Filein>
{
$string=$_;
chomp($string);
$string=~s/^\s+//;
@line=split(/\s+/,$string);
shift(@line);
$string="@line";

if(($string=~/\s$tt1\/[a-zA-Z]\s$tt3\/[a-zA-Z]\s/)||($string=~/\s$tt2\/[a-zA-Z]/))
{
       
        my $a=$`;
        my $b=$';
        my $pp=$&;
        my @pp=$pp;
       

my @qian=split(/\s+/,$a);
my @hou=split(/\s+/,$b);

my $i;
my @reversed=reverse(@qian);
my $n=@reversed;
if($n>
{
@reversed=@reversed[0..7];
}
else
{
for($i=0;$i<8-$n;$i++)
{
        push(@reversed,0);
        #print "@reversed\n";
}
}
@qian=reverse(@reversed);
#print "@qian\n";

       
my $n=@hou;
my $j;
if($n>
{
        @hou=@hou[0..7];
}
else
{
        for($j=0;$j<8-$n;$j++)
        {
        push(@hou,0);
        }
#print "@hou\n";
}       
my $qian="@qian";
my $hou="@hou";
#my $juzi=$qian.$hou;       

$pp=aa;
my $juzi=$qian." ".$pp." ".$hou."";

$qian=~s/\/[a-z]+|\/[A-Z][a-z]//msg;
$hou=~s/\/[a-z]+|\/[A-Z][a-z]//msg;
$juzi=~s/\/[a-z]+|\/[A-Z][a-z]//msg;

if($string=~/\s$tt1\/[a-zA-Z]\s$tt3\/[a-zA-Z]\s/)
  {
  $jieguo="fen";
print "fen: $juzi\n";
  }
else
{
  $jieguo="he";
print "he:  $juzi\n";
}

$juzi=$juzi." ".$jieguo."\n";

  open(FILEHANDLE,">>C:\\CRF++-0.42\\lv.txt" or die "can't open file\n";
     foreach (@pp)
      {
     print FILEHANDLE "$juzi\n";
       }
     close(FILEHANDLE);  
         
$#result=-1;
$#result1=-1;
$#pp=-1;

}


}


QUOTE:
原帖由 梅尔 于 2008-6-13 22:20 发表

我在做一个关于组合歧义的问题。
我编写的程序是从中文文本中找到与“才能”和“才 能”相匹配的句子并输出。只要匹配词的前后6位,并将它们连成一个字符串输出做测试

1. 麻烦用一个实例来说明上面那句话
2. 麻烦 禁用笑脸
3. 你可以把你的测试文件也发上来嘛,要不怎么测试
我是用条件随机场做测评,我把我的程序和结果都传上,请你帮我看一下。
我是先从199801.txt语料库中提取与“才能”或“才 能”相匹配的句子(程序为lv.pl),
如果是“才能”就是“he”的形式,如果是“才 能”就是“fen”的形式。
将这些句子提出放入lv.txt,后用fj.pl分成一个test.txt和一个train.txt,再利用条件随机场,生成一个result.txt,并根据其中的最后两行“he”或“fen”来判断句子的准确性。

谢谢了


我的附件上传不了...
就这么跟您说吧,这是测试后生成的评测TXT,he的情况中间会产生一个空格,我就想用一个程序,将空格补上。
即测试时“才 能”相当于两个空格,“才能”相当于一个空格,这样我的特征值个数就不一样了
我就想找一个方法,比如例用“AA”来代“才能”和“才 能”,使它们当做一个位置进行输出
这是我用来连接的词句my $juzi=$qian." ".$hou."";

火炉        ,        可        还        得        对        它        升温                施        焊        。        由于        罐内        酸雾        弥漫        he        he

这个        基础        ,        基础        打        牢        了        ,        建设        高楼大厦        ,        否则        ,        不论        大厦        设计        fen        fen

完成        由        稚嫩        走向        成熟        的        过程        ,                真正        成为        一        名        世界级        的        选手        he        fen

。        只有        这样        ,        外来        的        优秀        文化        达到        “        洋为中用        ”        。        0        0        0        fen        fen
你把你那个语料库文件,选个几十行,传上来吧。要不,实在看不明白你为什么那么写。