Какой самый быстрый способ подсчитать количество слов в строке в Perl?

У меня есть несколько функций, которые я запускаю более миллиона раз для различных текстов, а это означает, что небольшие улучшения в этих функциях приводят к большим успехам в целом. В настоящее время я заметил, что все мои функции, связанные с подсчетом слов, выполняются значительно дольше, чем все остальное, поэтому я думаю, что хочу попробовать подсчет слов другим способом.

В основном, что делает моя функция захватывает несколько объектов, с которыми связан текст, проверяет, не соответствует ли этот текст определенным шаблонам, а затем подсчитывает количество слов в этом тексте. Базовая версия функции:

my $num_words = 0;
for (my $i=$begin_pos; $i<=$end_pos; $i++) {
   my $text = $self->_getTextFromNode($i);
   #If it looks like a node full of bogus text, or just a number, remove it.
   if ($text =~ /^\s*\<.*\>\s*$/ && $begin_pos == $end_pos) { return 0; }
   if ($text =~ /^\s*(?:Page\s*\d+)|http/i && $begin_pos == $end_pos) { return 0; }
   if ($text =~ /^\s*\d+\s*$/ && $begin_pos == $end_pos) { return 0; }
   my @text_words = split(/\s+/, $text);
   $num_words += scalar(@text_words);
   if ($num_words > 30) { return 30; }
}
return $num_words;
}

I ' m делаю множество сравнений текста, подобных тому, что я делаю здесь в другом месте своего кода, поэтому я предполагаю, что моя проблема должна быть связана с подсчетом слов. Есть ли более быстрый способ сделать это, чем разделение на \ s + ? Если да, то что это такое и почему быстрее (чтобы я мог понять, что делаю неправильно, и применить эти знания к аналогичным проблемам позже).

7
задан serenesat 29 May 2015 в 13:49
поделиться