Como classifico palavras por contagem de sílabas?

6

Como faço para executar uma classificação crescente de uma lista de palavras, com base em quantas sílabas cada palavra contém?

Exemplo de entrada:

something
important
dog
cat
bookshelf

Exemplo de saída:

dog
cat
something
bookshelf
important
    
por J363 02.05.2016 / 03:50

1 resposta

15

Esse script perl cria um hash com palavras (leia uma por linha de stdin e / ou de qualquer nome de arquivo listado na linha de comando) como chaves, e a sílaba conta como os valores.

Em seguida, ele imprime as chaves de hash, classificadas pelas contagens de sílabas.

#! /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";

Saída:

cat
dog
bookshelf
something
important

Se você quiser imprimir a contagem de sílabas junto com cada palavra, altere a última linha para algo assim:

foreach my $word (sort { $words{$a} <=> $words{$b} } keys(%words)) {
    printf "%2i: %s\n", $words{$word}, $word;
};

Saída:

 1: cat
 1: dog
 2: bookshelf
 3: something
 3: important

Esta versão destaca o fato de que, como o próprio módulo afirma, apenas estima a contagem de sílabas. "bookshelf" é contada corretamente como tendo apenas duas sílabas, mas "algo" também deve ser dois.

Eu não examinei de perto o código do módulo, mas ele provavelmente está ficando confuso com o e após o m . Em muitas (mais?) Palavras, isso não seria um e silencioso e contaria como uma sílaba extra.

    
por 02.05.2016 / 04:04