如何按音节数对单词进行排序?

如何按音节数对单词进行排序?

如何根据每个单词包含的音节数对单词列表进行升序排序?

输入示例:

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”也应该是两个音节。

我没有仔细检查模块代码,但它可能会em.在许多(大多数?)单词中,这不是一个沉默音节e,而是一个额外的音节。

相关内容