各単語に含まれる音節の数に基づいて単語のリストを昇順にソートする方法は?
入力例:
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音節でなければなりません。
モジュールコードの詳細を確認していませんが、おそらくe
。m
多くの(ほとんど?)言葉では、これは無音音節ではなく、e
追加の音節です。