音節の数に基づいて単語をソートする方法は?

音節の数に基づいて単語をソートする方法は?

各単語に含まれる音節の数に基づいて単語のリストを昇順にソートする方法は?

入力例:

something
important
dog
cat
bookshelf

出力例:

dog
cat
something
bookshelf
important

答え1

このPerlスクリプトは、単語(標準入力および/またはコマンドラインにリストされているファイル名から1行に1つずつ読み取る)をキーとして使用し、音節数を値としてハッシュを構築します。

次に、音節数でソートされたハッシュキーを印刷します。

#! /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」は2音節のみであると正しく計算されますが、「something」も2音節でなければなりません。

モジュールコードの詳細を確認していませんが、おそらくem多くの(ほとんど?)言葉では、これは無音音節ではなく、e追加の音節です。

関連情報