0

$ stopwordsを印刷するにはどうすればよいですか?文字列($)のようですが、印刷すると「HASH(0x8B694)」と表示され、実行ごとにメモリアドレスが変更されます。

私はLingua::StopWordsを使用していますが、使用しているストップワードを印刷したいだけなので、どのストップワードが存在するかを確実に把握できます。この2つをファイルに印刷したいと思います。

$ stopwordsをなんらかの方法で尊重する必要がありますか?

コードは次のとおりです。

use Lingua::StopWords qw( getStopWords );

open(TEST, ">results_stopwords.txt") or die("Unable to open requested file.");
my $stopwords = getStopWords('en');

print $stopwords;

私はもう試した:

my @temp = $stopwords;
print "@temp";

しかし、それはうまくいきません。ヘルプ!

最後の注意:Lingua :: StopWordsのストップワードのリストがあることは知っていますが、私は(en)を使用しており、使用しているストップワードを絶対的に確認したいので、それを印刷したいと思います理想的には、ファイルの一部ですでに知っているはずのファイルに印刷したいと思います。

4

4 に答える 4

7

$文字列を意味するものではありません。これはスカラーを意味し、文字列、数値、または参照である可能性があります。

$stopwordsハッシュ参照です。ハッシュとして使用するには、を使用します%$stopwords

ハッシュの内容を印刷する簡単な方法として使用Data::Dumperします(参照渡し):

use Data::Dumper;
...
print Dumper($stopwords);
于 2012-11-02T19:59:39.500 に答える
3

hashrefを逆参照するには:

%hash = %{$hashref};  # makes a copy

したがって、キー値を反復処理します

while(($key,$value)=each%{$hashref}){
    print "$key => $value\n";
}

または(効率は低いが教訓的な目的)

for $key (keys %{$hashref}){
    print "$key => $hashref->{$key}\n";
}
于 2012-11-02T19:58:50.393 に答える
2

Data:: Dumperの優れた代替手段としてData::Printerをご覧ください。それはあなたにきれいに印刷された出力とオブジェクトが提供するメソッドに関する情報を提供します(あなたがオブジェクトを印刷している場合)。だから、あなたが持っているものがわからないときはいつでも:

use Data::Printer;
p( $some_thing );

あなたはそれがどれほど便利であるかに驚くでしょう。

于 2012-11-02T20:49:16.143 に答える
1

getStopWordsハッシュ参照(ハッシュへの参照)を返すため、先頭に。を付けることで逆参照します%。また、実際には、値(すべて1)ではなく、キーのみが必要なので、関数を使用しkeysます。例えば:

print "$_\n" foreach keys %$stopwords;

また

print join(' ', keys %$stopwords), "\n";

一時変数をスキップすることもできますが、Perlが何が起こっているかを認識できるように、呼び出しを中括弧で囲む$stopwords必要があります。getStopWords{...}

print join(' ', keys %{getStopWords('en')}), "\n";
于 2012-11-02T19:59:44.623 に答える