如何根据每个单词包含的音节数对单词列表进行升序排序?
输入示例:
something
important
dog
cat
bookshelf
示例输出:
dog
cat
something
bookshelf
important
答案1
此 Perl 脚本使用单词(从标准输入每行读取一个,和/或从命令行上列出的任何文件名)作为键,并将音节计数作为值来构建哈希。
然后它打印哈希键,按音节计数排序。
#! /usr/bin/perl
use strict;
use Lingua::EN::Syllable;
my %words = ();
while(<>) {
chomp;
$words{$_} = syllable($_);
};
print join("\n",sort { $words{$a} <=> $words{$b} } keys(%words)), "\n";
输出:
cat
dog
bookshelf
something
important
如果您想打印每个单词的音节数,请将最后一行更改为如下所示:
foreach my $word (sort { $words{$a} <=> $words{$b} } keys(%words)) {
printf "%2i: %s\n", $words{$word}, $word;
};
输出:
1: cat
1: dog
2: bookshelf
3: something
3: important
这个版本强调了一个事实,正如模块本身声称的那样,它只估计音节数。 “bookshelf”被正确地算作只有两个音节,但“something”也应该是两个音节。
我没有仔细检查模块代码,但它可能会e
被m
.在许多(大多数?)单词中,这不是一个沉默音节e
,而是一个额外的音节。