【发布时间】:2023-03-26 12:23:01
【问题描述】:
我正在努力制作一个 perl 脚本,请注意我对此很陌生..
这是我试图实现的目标:制作一个脚本,该脚本采用 .txt 文件并计算文件中的每个单词。并且当它被计算时,如果文件中的前 10 个单词显示每个单词我计算了多少次,那么这些单词会列出一个列表。
这就是我到目前为止所做的,我能够让脚本计算单词以及它们出现的次数。现在我需要进入前十名,我真的不知道在哪里以及如何去做。这是一个家庭作业,所以我不希望/期望你为我解决它,只是给我一些关于从哪里开始的指示。
感谢您的帮助(提前)
10 月 15 日更新
好的,一切都很好,但是..
现在它只是在一行中打印所有内容。我需要它像这样打印它:
4 字
3 下一个词
2 下一个单词
你明白了..
我想我明白了……我想:P
....................................
#! /usr/bin/perl
use utf8;
print ("Vilken fil?\n");
my $filen = @ARGV ? shift(@ARGV) : <STDIN>;
chomp $filen;
my %freq;
open my $DATA, $filen or die "Hittade inte den filen!";
while(<$DATA>) {
s/[;:()".,!?]/ /gio;
foreach $word(split(' ', lc $_)) {
$freq{$word}++;
}
}
@listing = (sort { $freq{$b} <=> $freq{$a} } keys %freq)[0..9];
foreach my $word (@listing )
{ print $freq{$word}." $word\n"; };
【问题讨论】:
-
这句话中,单词句子出现了多少次? (你的代码会说一个。)
-
Regex 对我来说似乎有缺陷。在字符串
Hello? Hello! Is somebody here?中,您将不将Hello视为最常用的词。也许/[^\w-]+/(或至少/\s+/包含换行符)会产生更好的结果。 -
split ' '(按空格分割)优于split / /(按空格分割)。不过,除了这种特殊情况,我确实鼓励split /.../超过split '...'。 -
如果有机会使用标点符号,这篇文章可能会对您有所帮助,以便您只抓住单词。 stackoverflow.com/questions/3614686/…
标签: perl