我正在尝试创建一个程序,我在其中读取一个包含大量文本的文件。然后我拿出标点符号,然后我读了一个文件,里面有停用词。两者都被读入并放入数组中。我正在尝试将一般文本文件的数组放入哈希值。我不确定我做错了什么,但我正在努力。我想这样做,所以我可以生成有关重复多少单词和不重复多少单词的统计数据,但我必须取消停止单词等。
无论如何,这是我到目前为止我发表评论#WORKING ON MERGING ARRAY IN HASH,这是我工作的地方。我不认为我试图将数组放入哈希的方式是正确的,但我在网上查看了%hash {array} =“value”;不编译。所以不知道怎么做。
谢谢,如果您对我有任何疑问,我会尽快回复。
#!/usr/bin/perl
use strict;
use warnings;
#Reading in the text file
my $file0="data.txt";
open(my $filehandle0,'<', $file0) || die "Could not open $file0\n";
my@words;
while (my $line = <$filehandle0>){
chomp $line;
my @word = split(/\s+/, $line);
push(@words, @word);
}
for (@words) {
s/[\,|\.|\!|\?|\:|\;]//g;
}
my %words_count; #The code I was told to add in this post.
$words_count{$_}++ for @words;
接下来,我读到了另一个数组中的停用词。
#Reading in the stopwords file
my $file1 = "stoplist.txt";
open(my $filehandle1, '<',$file1) or die "Could not open $file1\n";
my @stopwords;
while(my $line = <$filehandle1>){
chomp $line;
my @linearray = split(" ", $line);
push(@stopwords, @linearray);
}
for my $w (my @stopwords) {
s/\b\Q$w\E\B//ig;
}
答案 0 :(得分:7)
关于Perl中哈希的一些注释......问题描述:
无论如何,这是我到目前为止我发表评论#WORKING ON MERGING ARRAY IN HASH,这是我工作的地方。我不认为我试图将数组放入哈希的方式是正确的,但我在网上查看了%hash {array} =“value”;不编译。所以不知道怎么做。
首先,问问自己为什么你想“将数组放入哈希”。数组表示值列表,而哈希表示一组键值对。所以你必须定义键和值应该是什么。不仅对我们而言,对你而言。它通常有助于explain even simple things to get a better understanding。
在这种情况下,您可能需要计算$word
数组中给定单词@words
的出现频率。这可以通过迭代所有单词并每次增加$count{$word}
来完成。这就是@ raina77ow在他的回答中所做的。这里重要的是,您正在访问单个哈希值,这些哈希值用Perl中的标量符号$
表示。因此,如果您有一个名为%count
的哈希值,则可以通过
'foo'
的值
$count{foo}++;
上面的“在线观看”结果(%hash{array} = "value"
)没有意义。有三种有效的方法可以在散列中存储值:
通过为整个哈希值分配一个偶数大小的列表来设置所有键值对:
%count = (hello => 42, world => 17);
为给定键设置单个值,为已定义的键分配单个值(这是我们之前所做的):
$count{hello} = 42;
使用所谓的哈希切片为给定的键列表设置值列表:
@count{qw(hello world)} = (42, 17);
请注意这里使用的符号:%
表示混合密钥和值的hashy偶数列表,$
表示单个(标量)值,@
表示值列表。在您的示例中,您使用的是%
,但在大括号{...}
中定义了一个数组,并指定了一个标量值。
答案 1 :(得分:4)
好吧,如果你在@words
数组中有一个单词列表,并希望得到一个散列,其中每个键引用特定单词,并且每个值是源数组中这个单词出现的数量,它是完成就像......一样简单。
my %words_count;
$words_count{$_}++ for @words;
换句话说(没有双关语),你迭代@words
数组,每个成员增加1 %words_count
哈希OR的对应元素,当该元素尚未定义时,基本上创建它的值为1(所谓的auto-vivification)。
作为旁注,在数组上调用keys
函数几乎没有意义:在5.12 +中,它将为您提供使用的索引列表,在此之前,抛出语法你错了。