perl中的删失词

时间:2015-09-11 15:03:33

标签: perl

我试图制作一个审查过的单词脚本, 我不知道为什么,但我的剧本没有正确审查这些词。 审查状态为80%〜

这是我的代码:

    #!/usr/bin/perl -w
    use strict;

    my @text;
    my @cencoredText;

    my $file = "blabla\\text.txt";
    open(FH, "<", $file) or die "cant open file";

    while(<FH>)
    {
        push(@text,$_);
    }
    close(FH);

    my $cencoredFile = "blabla\\forbidden.txt";
    open(FH2, "<", $cencoredFile) or die "cant open file";

    while(<FH2>)
    {
        push(@cencoredText,$_);
    }

    close(FH2);

    for(my $i=0; $i<@cencoredText; $i++)
    {
        for(my $j=0; $j<@text; $j++)
        {
            $text[$j] =~ s/${cencoredText[$i]}/censored/g;
        }

    }

打开两个文件,perl脚本从中获取信息.. 我不知道什么是错的.. 谢谢!

1 个答案:

答案 0 :(得分:3)

要回答您的直接问题,您需要chomp在您读入两个数组@text@censoredText的每个输入行末尾的换行符:

...
while( <FH> ) {
    chomp;
    push(@text,$_);
}
close(FH);

my $cencoredFile = "blabla\\forbidden.txt";
open(FH2, "<", $cencoredFile) or die "cant open file";

while(<FH2>) {
    chomp;
    push(@cencoredText,$_);
}
...

与您提出的问题没有直接关系的几点:

数组真的是最好的数据结构选择,表明应该审查一个单词吗?

我要说不。一个问题是,为了识别应该被审查的单词,您当前循环遍历@censoredText中的每个单词,然后循环遍历@text的每一行的每个单词。如果你有N行文本和M个禁止词,那么你的整体复杂度为O(N*M),当N和M增加时,这并不是很好。如果您使用哈希来表示应该审查的字词,则可以将其减少为O(max(N,M))

或者,您可以使用每个禁用词构造一个模式,并在整个输入文件中进行全局替换。