各位老大,请教单词替换的问题。

各位老大,请教单词替换的问题。

我想把几篇英文中的单词通过一个词形还原表进行词形还原,例如:
If I cannot answer to the question, I will look up the data or ask for the teacher to satisfy the curious desire of this two amateurish college students.
When I went home last year,I was surprised that mother can repeat the definition of Infobahn. Of course, father reminded her sometimes.
Parents also need the new knowledge, sincere communication and care and understanding. While writing a letter to home is the best way.

词形还原表示例:
am        be
are        be
is        be
was        be
were        be
being        be
been        be
'm        be
m        be
beaches        beach
beaching        beach
beached        beach
我想把文中在词形还原表中出现的前面的单词还原为后面的单词,用制表符隔开,例如把am还原为be,即用表中后面的单词代替前面的单词。
我写了一个perl程序,可运行不正确,麻烦老大们帮着看看,改一改。谢谢!!!!
#!/usr/bin/perl
open(Fl,"lemma.lem")or die 'error';
while(<Fl>){
   chomp;
   my @lemas =split(\t);
                $mapDict{$lemas}= @lemas;
}
close Fl;

system ("dir *.txt/b/n >list.list");
open (FX, "list.list") or die "error2";
while (<FX>)
{  chomp;
        &each($_);
        };
        close (FX);
       
        sub each
        { local ($file) = @_;
                $out = $file.".out";
open (F0, "$file") or die "error";
open (F2, ">$out")or die "error";
while(<F0>){
   chomp;
@words=split /\s+/;
foreach $temp(@words){
        $temp=~s/-//gi;
        $temp=lc($temp);
        if(defined $mapDict{$lemas}){tr/$temp/$lemas/};
        print F2 $_ ;
}
}
}
$string =~ s/\b(am|are|is|was|were|being|'m|m)\b/be/g;
这个意思吗
是的。但是整篇文章都要替换。
简单点说就是把词形表中前面的单词替换为后面的单词。
词形表中单词很多,示例:
larvae        larva
larynxes        larynx
lasers        laser
lashes        lash
lashing        lash
lashed        lash
lashings        lashing
lasses        lass
lassies        lassie
lassoes        lasso
lassoing        lasso
lassoed        lasso
lasts        last
lasting        last
lasted        last
latches        latch
latching        latch
latched        latch
latchkeys        latchkey
later        late
latest        late
latecomers        latecomer
lathes        lathe
lathers        lather
lathering        lather
lathered        lather
Latins        Latin
latitudes        latitude
latrines        latrine
lattices        lattice
lauds        laud
lauding        laud
lauded        laud
laughs        laugh
laughing        laugh
laughed        laugh
launches        launch
launching        launch
launched        launch
launders        launder
laundering        launder
laundered        launder
my @lemas = split;
$h{$lemas[0]} = $lemas[1];

开头那段应该这样吧。
#!/usr/bin/perl
use strict;
use warnings;

my %h;

open FI ,"lemma.lem" or die "error: $!";
while(<FI>) {
        chomp;
        my @lemas = split;
        $h{$lemas[0]} = $lemas[1];
}
close FI;

system ("dir *.txt/b/n >list.list");
open FX ,"list.list" or die "error: $!";
open F2 ,">out" or die "error: $!";
while(<FX>) {
        my @sen = map { $h{$_} || $_ } split;
        print F2 "@sen\n";
}

这样呢?
谢谢!很好!
我仔细看了一下,似乎只能替换第一个单词,后面的单词没有替换。例如
After enter the college, the freshness disappeared, and the letter become few and fewer, 第一个fewer变成few,可第二个fewer未变。
and I do not tell that daily thing to my parent any more.
However, the most beneficial thing of family letter be that they make me suddenly understand the hide humorous of
my parents.
第一个parents变为parent,可第二个未变。
他那个程序忽略了一个地方,就是单词和标点会粘在一起,而且可能会改变空格个数
他写的东西往往让我比较晕……

我根据 ly5066113 的程序改的,应该符合你的要求:

[Copy to clipboard] [ - ]
CODE:
#! /usr/bin/perl -w
#        perl.pl

use strict;        use warnings;
my %h;

open FI ,"words.txt" or die "error: $!";
while(<FI>) {
        chomp;
        my @lemas = split;
        $h{$lemas[0]} = $lemas[1];
}
close FI;

open FX ,"article.txt" or die "error: $!";
#open F2 ,">out" or die "error: $!";
while(<FX>) {
        s/(\w+)/$h{$1} || $1/eg;
        print;
        #print F2;
}

如果要输入到目标文件out,就把注释去掉好了
非常感谢perljoker老大的支持和帮助!问题已经解决,一个是标点的问题,另一个是大小写的问题。再次感谢perljoker老大。谢谢!