3

我遇到了文本处理问题。我有一篇文章,我想知道有多少“真实”的单词。

这就是我所说的“真实”。文章通常包含各种标点符号,如破折号,逗号,点等。我想知道有多少单词,跳过“ -”破折号和“ ,”逗号带空格等。

我试过这样做:

my @words = split ' ', $article;
print scalar @words, "\n";

但这包括各种标点符号,其中包含空格作为单词。

所以我正在考虑使用这个:

my @words = grep { /[a-z0-9]/i } split ' ', $article;
print scalar @words, "\n";

这将匹配所有包含字符或数字的单词。您认为,这是否足以计算文章中的字数?

有谁知道CPAN上的一个模块可以做到这一点?

4

2 回答 2

2

尝试使用:\W- 任何非单词字符,并删除 _

解决方案

use strict;

my $article = 'abdc,  dd_ff,  11i-11,  ff44';

# case David's, but it didn't work with I'm or There's
$article         =~ s/\'//g; 
my $number_words = scalar (split /[\W_]+/, $article);

print $number_words;
于 2012-07-11T20:48:09.203 回答
1

我认为您的解决方案与您将获得的一样好,而无需诉诸复杂的东西。

你也可以写成

my @words = $article =~ /\S*\w\S*/

或通过写来计算文件中的单词

my $n = 0;
while (<>) {
  my @words = /\S*\w\S*/g;
  $n += @words;
}

say "$n words found";

尝试一些示例文本块并查看它找到的“单词”列表。如果您对此感到满意,那么您的代码就可以工作。

于 2012-07-11T22:35:53.030 回答