| Lingua-ES-Silabas documentation | Contained in the Lingua-ES-Silabas distribution. |
Lingua::ES::Silabas - Divide una palabra en sílabas
use Lingua::ES::Silabas; $palabra = 'externocleidomastoideo'; # muchas silabas ;-) ## en contexto de lista, ## lista de silabas que componen la palabra @silabas = silabas($palabra); ## en contexto escalar, ## el numero de silabas que componen la palabra $num_silabas = silabas($palabra);
Lingua::ES::Silabas::silabas() recibe como argumento una palabra y regresa una lista con las sílabas que la forman.
Probablemente existan errores en el código, o en las reglas que se utilizan para separar las palabras en sílabas, por lo que las correcciones serán bienvenidas.
Marco Antonio Valenzuela Escárcega, <marcos@cpan.org>
Copyright (C) 2002 Marco Antonio Valenzuela Escárcega
Este módulo es software libre; puede ser distribuido y/o modificado bajo los mismos términos que Perl.
| Lingua-ES-Silabas documentation | Contained in the Lingua-ES-Silabas distribution. |
package Lingua::ES::Silabas; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(silabas); our $VERSION = '0.01'; ###################################################################### # grupos consonánticos my @GC = qw( bl br ch cl cr dl dr fl fr gl gr ll pl pr rr tl tr ); my $VA = 'áéíóúÁÉÍÓÚ'; # vocales acentuadas my $VD = '[iuüÜ]'; # vocales débiles my $VF = "[aeo$VA]"; # vocales fuertes my $V = "(?:$VD|$VF)"; # vocales my $C = '[b-df-hj-np-tv-zñÑ]'; # consonantes my $CoGC = '(?:'. join('|', @GC) ."|$C)"; # consonantes y grupos consonánticos my $dipt = "(?:${VD}h?$VF|${VF}h?$VD|$V$V)"; # diptongos my $tript = "(?:$V$V$V)"; # triptongos sub silabas ($) { my $palabra = shift; my @silabas; while ($palabra) { if ($palabra =~ /^($C*?(?:$tript|$dipt|$V)$C{0,2}?)$CoGC$V/io) { push @silabas, $1; substr $palabra, 0, $+[1], ''; } else { push @silabas, $palabra; undef $palabra; } } # hiatos @silabas = map { !/(.*?$VF$VD?)(?(?=$VF$VF)($VF))($VF.*)/sio ? $_ : $2 ? ($1,$2,$3) : ($1,$3) } @silabas; return @silabas; } 1; __END__