2

正如您从下面的 Perl 代码片段中看到的那样,我将$document字符串(包含来自文本文档的文本)放入一个@document数组中。$document然后在停止之前打印出来。然后我对@document数组进行词干处理,然后将词干结果放入我的$stemmed_words_anon_array字符串中,但我得到:ARRAY(0xc99b3c)这就像一个内存地址。

我究竟做错了什么?我的results_stemmed.txt也包含在ARRAY(0xc99b3c)里面。

# Put string of main document into an array
my @document = split(' ', $document);

# Print the $document string to check it before stemming it
print $document;

open (FILE_STEM, '>results_stemmed.txt');
use Lingua::Stem qw(stem);
my $stemmed_words_anon_array = stem(@document);
# $stemmed_words_anon_array is just receiving: ARRAY(0xcbacb) here
print FILE_STEM $stemmed_words_anon_array;
close(FILE_STEM);
print $stemmed_words_anon_array;
4

3 回答 3

5

这是一个参考。 @$stemmed_words_anon_array会给你阵列本身。有关如何在 Perl 中处理引用的更多信息,请参阅perldoc perlref.

于 2012-07-19T15:20:54.193 回答
1

Lingua::Stem 模块的文档有点不清楚。作为用户,您并不关心它是一个匿名数组。您关心它是对匿名数组的引用。

当然,您只能通过引用访问匿名数组,但有时人们并没有意识到这一点。

当我在我的培训课程中介绍参考资料时,我总是向人们展示一个人的样子。并告诉他们他们不需要知道这一点,但在某些时候,当他们打算打印引用的变量时,他们会意外地打印一个引用 - 所以能够识别它很有用。

于 2012-07-20T10:12:50.937 回答
1

您可以使用File::Slurp::write_file快速写入以下内容的全部内容@$stemmed_words_anon_array

use File::Slurp qw( write_file );
use Lingua::Stem qw( stem );

my $stemmed_words = stem(split ' ', $document);
write_file 'results_stemmed.txt', $stemmed_words;
print "@$stemmed_words\n";
于 2012-07-19T18:05:02.727 回答