J36*_*363 6 sed awk perl text-processing
如何根据每个单词包含的音节数对单词列表进行升序排序?
示例输入:
something
important
dog
cat
bookshelf
Run Code Online (Sandbox Code Playgroud)
示例输出:
dog
cat
something
bookshelf
important
Run Code Online (Sandbox Code Playgroud)
cas*_*cas 15
这个 perl 脚本用单词(从 stdin 中每行读取一个,和/或从命令行中列出的任何文件名中读取一个)作为键构建一个散列,并且音节计数作为值。
然后它打印散列键,按音节计数排序。
#! /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";
Run Code Online (Sandbox Code Playgroud)
输出:
cat
dog
bookshelf
something
important
Run Code Online (Sandbox Code Playgroud)
如果要打印每个单词的音节数,请将最后一行更改为如下所示:
cat
dog
bookshelf
something
important
Run Code Online (Sandbox Code Playgroud)
输出:
1: cat
1: dog
2: bookshelf
3: something
3: important
Run Code Online (Sandbox Code Playgroud)
这个版本强调了一个事实,正如模块本身声称的那样,它只估计音节数。“书架”被正确地计算为只有两个音节,但“某物”也应该是两个音节。
我还没有仔细检查模块的代码,但它可能越来越被迷惑e
后m
。在许多(大多数?)词中,这不是无声的e
,而是算作额外的音节。