1

我正在使用来自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;

如何让它使用 my $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;

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

4

1 回答 1

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 };
}
于 2012-05-07T15:35:51.627 回答