我有我上运行各种文本超过一百万次,这意味着在这些功能的小改进,转化为巨大收益总体的一些功能。目前,我注意到我的所有功能,其中涉及字数大幅更长的时间比其他一切的运行,所以我想我想尝试用不同的方式做字数。什么是算在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;
}
我做很多类似我在其他地方在这里做在我的代码是什么文本比较的,所以我猜我的问题必须与我的字计数。有没有更快的方式做到这一点比\s+
分裂?如果是这样,它是什么,为什么它快(所以我能够理解我在做什么错,并且可以应用知识,以类似的问题以后)。
不错!谢谢!这太棒了。 – Eli 2011-05-19 19:22:06
很棒的“为什么”去与“什么”。很好,你指出'基准'用于进一步的实验和优化。 – DCharness 2011-05-19 19:28:39