1

我有一个正在读入的文件,然后将其更改为一个数组,然后对其进行计数并放入哈希表中。然后,我将另一个包含停用词的文件读入数组。我想获取停用词数组并将其与哈希表进行比较,如果停用词中的一个词匹配,则它将其从哈希表中删除。

我很好奇我可以用什么方法来使用 perl 来实现这一点。我不会发布我的代码,因为我避免让其他人编写我的代码。我只是想知道我该怎么做。如果有人有一个好的网站,我可以参考这可能会有所帮助。

4

3 回答 3

3

试试这个:

my %table = some_sub_to_populate_table();
my @stop_words = some_sub_to_get_stopwords();
for my $stop_word ( @stop_words ) {
    delete $table{ $stop_word };
}
于 2012-11-19T15:08:50.983 回答
1

这也应该有效

open FH,"<".$PATH or die $!;
my $table={};
while(<FH>){
    $table->{$_}=VALUE
}
close FH;
open FH,"<".$PATH2 or die $!;
my @arr=<FH>;
close $FH;
delete $table{$_} foreach(@arr);

问候

于 2012-11-19T15:14:50.860 回答
1

我最初会使用简单的循环解决方案,但也对其他方法感兴趣。也许你可以试试这个?

my %new_table = map { $_ => $old_table{$_} } grep { not $_ ~~ @stop_words } keys %old_table;

1:它使用grep获取不在 @stop_words 中的所有哈希键:

grep { not $_ ~~ @stop_words } keys %old_table;

2:使用这些键,它使用map创建一个新的哈希:

my %new_table = map { $_ => $old_table{$_} }

如果要将它们转换为数组,则可以使用Array::Utils的 array_minus

于 2012-11-20T10:39:25.400 回答