如何将其打印到我的文件而不是我的Perl程序中的屏幕?

时间:2012-05-07 15:18:23

标签: perl

我正在使用Lingua::StopWords中的以下示例:

use Lingua::StopWords qw( getStopWords );
my $stopwords = getStopWords('en');

my @words = qw( i am the walrus goo goo g'joob );

# prints "walrus goo goo g'joob"
print join ' ', grep { !$stopwords->{$_} } @words;

如何使用我的$document,删除停用词并将结果打印到文件中?请在此处查看我的代码:

open(FILESOURCE, "sample.txt") or die("Unable to open requested file.");
my $document = <FILESOURCE>;
close (FILESOURCE);

open(TEST, "results_stopwords.txt") or die("Unable to open requested file.");

use Lingua::StopWords qw( getStopWords );
my $stopwords = getStopWords('en');

print join ' ', grep { !$stopwords->{$_} } $document;

我试过这些变化:

print join ' ', grep { !$stopwords->{$_} } TEST;


print TEST join ' ', grep { !$stopwords->{$_} } @words;

基本上,我如何阅读文档,删除停用词然后将结果写入新文件?

1 个答案:

答案 0 :(得分:3)

在您的程序中,您忘记将输入文本标记为单词。 Lingua::EN::Splitter::words的简单替代方法是split将空格中的一行放入一个单词列表中(大约)。

考虑到tchrist的评论,这个程序适合作为Unix过滤器。

use strictures;
use Lingua::StopWords qw(getStopWords);
use Lingua::EN::Splitter qw(words);
my $stopwords = getStopWords('en');
while (defined(my $line = <>)) {
    print join ' ', grep { !$stopwords->{$_} } @{ words $line };
}