0

如何打印 $stopwords?它似乎是一个字符串($),但是当我打印它时,我得到:“HASH(0x8B694)”,每次运行时内存地址都会发生变化。

我正在使用 Lingua::StopWords,我只是想打印它正在使用的停用词,所以我确定那里有哪些停用词。我想打印这两个文件。

我需要如何尊重 $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::Printer作为 Data::Dumper 的一个不错的替代品。它将为您提供漂亮的打印输出以及有关对象提供的方法的信息(如果您正在打印对象)。因此,每当您不知道自己拥有什么时:

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

你会惊讶于它的方便程度。

于 2012-11-02T20:49:16.143 回答
1

getStopWords返回一个哈希ref——一个哈希的引用——所以你可以通过在前面加上%. 而且您实际上只想要它的键,而不是它的值(都是1),因此您将使用该keys函数。例如:

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

或者

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

你也可以跳过临时变量$stopwords,但是你需要把getStopWords调用用大括号括起来{...},这样 Perl 才能知道发生了什么:

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