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;

$documentmy を使用し、ストップワードを削除して、結果をファイルに出力するにはどうすればよいですか? ここで私のコードを参照してください:

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::wordssplit、スペースの行を単語のリストにすることです(ほぼ)。

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 に答える