Я закрепил несколько сценариев Perl, предназначенных для того, чтобы вытащить каждое слово из партии документов, устранить все слова остановки, остановить оставшиеся слова и создать хэш, содержащий каждое слово и его частоту появления. Однако, после работы над ним в течение нескольких минут, я получаю «Из памяти!». сообщение в окне команд. Есть ли более эффективный способ достижения желаемого результата, или мне просто нужно найти способ доступа к большему количеству памяти?Самый эффективный с точки зрения памяти способ комбинирования слов и устранения хеш-слов в Perl?
#!/usr/bin/perl
use strict;
use warnings;
use Lingua::EN::StopWords qw(%StopWords);
use Lingua::Stem qw(stem);
use Mojo::DOM;
my $path = "U:/Perl/risk disclosures/2006-28";
chdir($path) or die "Cant chdir to $path $!";
# This program counts the total number of unique sentences in a 10-K and enumerates the frequency of each one.
my @sequence;
my %sequences;
my $fh;
# Opening each file and reading its contents.
for my $file (<*.htm>) {
my $data = do {
open my $fh, '<', $file;
local $/; # Slurp mode
<$fh>;
};
my $dom = Mojo::DOM->new($data);
my $text = $dom->all_text();
for (split /\s+/, $text) {
# Here eliminating stop words.
while (!$StopWords{$_}) {
# Here retaining only the word stem.
my $stemmed_word = stem($_);
++$sequences{"$stemmed_word"};
}
}
}
Я думаю, что вам нужно изменить 'в то время как (! $ StopWords {$ _}) {...} 'to' next, если определено $ StopWords {$ _}; '. Вы уже проверяете одно слово за раз с помощью 'for (split ...)', поэтому либо это слово является стоп-словом, либо нет, то нет необходимости в втором цикле. – ThisSuitIsBlackNot
Да, это избавило от сообщения об ошибке «Из памяти», спасибо! – Rick