我遇到了文字处理问题。我有一篇文章,我想知道有多少“真实”的单词。
这就是我所说的“真实”。文章通常包含各种标点符号,如破折号,逗号,圆点等。我想知道的是有多少单词,跳过“-
”破折号和“,
”带空格的逗号等。
我试过这样做:
my @words = split ' ', $article;
print scalar @words, "\n";
但这包括各种标点符号,其中有空格作为单词。
所以我想用这个:
my @words = grep { /[a-z0-9]/i } split ' ', $article;
print scalar @words, "\n";
这将匹配所有包含字符或数字的单词。您怎么看?这是否足够好地计算文章中的单词?
有没有人知道CPAN上的模块可能会这样做?
答案 0 :(得分: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;
答案 1 :(得分:1)
我认为你的解决方案与你不会诉诸精巧的东西一样好。
你也可以把它写成
my @words = $article =~ /\S*\w\S*/
或通过编写
来计算文件中的单词my $n = 0;
while (<>) {
my @words = /\S*\w\S*/g;
$n += @words;
}
say "$n words found";
尝试几个示例文本块,然后查看它找到的“单词”列表。如果您对此感到满意,那么您的代码就可以运行。