PHP Classes

How to Implement a PHP Word Split Function that Can Split Word by Syllables Using the Package Silabas: Separate syllables in Spanish

Recommend this page to a friend!
     
  Info   Example   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2025-03-27 (2 days ago) RSS 2.0 feedNot yet rated by the usersTotal: Not yet counted Not yet ranked
Version License PHP version Categories
silabas 1.0MIT/X Consortium ...5PHP 5, Text processing
Description 

Author

This package is specific mainly for applications used in Spain Spain .

This package can separate syllables in Spanish.

It provides a script and a class that can take a word in Spanish (Castellano) and can split the words, separating the syllables.

The class can return a new string with all syllables separated with dashes (-).

In Spanish:

Separator silabico para castellano escrito en PHP.

Picture of Juan Camacho
  Performance   Level  
Name: Juan Camacho <contact>
Classes: 6 packages by
Country: Spain Spain
Innovation award
Innovation award
Nominee: 3x

Winner: 1x

Instructions

Example

<?php

function silabas($word, $sep = '-') {
   
// Convierte la palabra a minúsculas
   
$word = mb_strtolower($word, 'UTF-8');
   
   
// Definición de categorías de letras
   
$l = ['r', 'l'];
   
$o = ['p', 'b', 'f', 't', 'd', 'c', 'k', 'g'];
   
$c = ['b', 'c', 'ch', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'll', 'm', 'n', 'ñ', 'p', 'q', 'r', 'rr', 's', 't', 'v', 'x', 'y', 'z'];
   
$a = ['a', 'e', 'o', 'á', 'é', 'ó', 'í', 'ú'];
   
$i = ['i', 'u', 'ü'];
   
   
// Inicialización de variables
   
$letras = [];
   
$estructura = '';
   
$j = 0;
   
   
// Primera parte: Construcción de letras y estructura
   
while ($j < mb_strlen($word, 'UTF-8')) {
        if (
$j == 0) {
            if (
mb_substr($word, $j, 1, 'UTF-8') == 'p' && mb_substr($word, $j + 1, 1, 'UTF-8') == 's') {
               
$letras[] = 'ps';
               
$estructura .= 'C';
               
$j += 2;
                continue;
            } elseif (
mb_substr($word, $j, 1, 'UTF-8') == 'p' && mb_substr($word, $j + 1, 1, 'UTF-8') == 'n') {
               
$letras[] = 'pn';
               
$estructura .= 'C';
               
$j += 2;
                continue;
            } elseif (
mb_substr($word, $j, 1, 'UTF-8') == 'p' && mb_substr($word, $j + 1, 1, 'UTF-8') == 't') {
               
$letras[] = 'pt';
               
$estructura .= 'C';
               
$j += 2;
                continue;
            } elseif (
mb_substr($word, $j, 1, 'UTF-8') == 'g' && mb_substr($word, $j + 1, 1, 'UTF-8') == 'n') {
               
$letras[] = 'gn';
               
$estructura .= 'C';
               
$j += 2;
                continue;
            }
        }
        if (
$j < mb_strlen($word, 'UTF-8') - 1) {
            if (
mb_substr($word, $j, 1, 'UTF-8') == 'c' && mb_substr($word, $j + 1, 1, 'UTF-8') == 'h') {
               
$letras[] = 'ch';
               
$estructura .= 'C';
               
$j += 2;
                continue;
            } elseif (
mb_substr($word, $j, 1, 'UTF-8') == 'l' && mb_substr($word, $j + 1, 1, 'UTF-8') == 'l') {
               
$letras[] = 'll';
               
$estructura .= 'C';
               
$j += 2;
                continue;
            } elseif (
mb_substr($word, $j, 1, 'UTF-8') == 'r' && mb_substr($word, $j + 1, 1, 'UTF-8') == 'r') {
               
$letras[] = 'rr';
               
$estructura .= 'C';
               
$j += 2;
                continue;
            }
        }
       
$char = mb_substr($word, $j, 1, 'UTF-8');
        if (
in_array($char, $a)) {
           
$letras[] = $char;
           
$estructura .= 'A';
           
$j += 1;
            continue;
        } elseif (
in_array($char, $i)) {
           
$letras[] = $char;
           
$estructura .= 'I';
           
$j += 1;
            continue;
        } elseif (
in_array($char, $l)) {
           
$letras[] = $char;
           
$estructura .= 'L';
           
$j += 1;
            continue;
        } elseif (
in_array($char, $o)) {
           
$letras[] = $char;
           
$estructura .= 'O';
           
$j += 1;
            continue;
        } elseif (
in_array($char, $c)) {
           
$letras[] = $char;
           
$estructura .= 'C';
           
$j += 1;
            continue;
        } else {
            throw new
Exception("No se reconoce el carácter '$char' como una letra del castellano.");
        }
    }
   
$estructura .= 'C';
   
$letras[] = '';
   
   
// Segunda parte: Separación en sílabas
   
$salida = [];
   
$j = 0;
   
$silaba = '';
    while (
$j < count($letras)) {
        if (
$letras[$j] == '') {
            break;
        }
       
$silaba .= $letras[$j];
        if (
$estructura[$j] == 'A') {
            if (
$estructura[$j + 1] == 'A') {
               
$salida[] = $silaba;
               
$silaba = '';
               
$j += 1;
                continue;
            } elseif (
$estructura[$j + 1] == 'I') {
               
$j += 1;
                continue;
            } elseif (
$estructura[$j + 1] == 'O') {
                if (
in_array($estructura[$j + 2], ['A', 'I', 'L'])) {
                    if (
$letras[$j + 1] == 'd' && $letras[$j + 2] == 'l') {
                       
$salida[] = $silaba . $letras[$j + 1];
                       
$silaba = '';
                       
$j += 2;
                        continue;
                    }
                   
$salida[] = $silaba;
                   
$silaba = '';
                   
$j += 1;
                    continue;
                } else {
                    if (
$letras[$j + 2] == 's' && in_array($estructura[$j + 3], ['L', 'C', 'O'])) {
                       
$salida[] = $silaba . $letras[$j + 1] . $letras[$j + 2];
                       
$silaba = '';
                       
$j += 3;
                        continue;
                    }
                   
$salida[] = $silaba . $letras[$j + 1];
                   
$silaba = '';
                   
$j += 2;
                    continue;
                }
            } else {
                if (
$j + 2 < count($letras)) {
                    if (
in_array($estructura[$j + 2], ['A', 'I'])) {
                       
$salida[] = $silaba;
                       
$silaba = '';
                       
$j += 1;
                        continue;
                    } else {
                        if (
$letras[$j + 2] == 's' && in_array($estructura[$j + 3], ['L', 'C', 'O'])) {
                           
$salida[] = $silaba . $letras[$j + 1] . $letras[$j + 2];
                           
$silaba = '';
                           
$j += 3;
                            continue;
                        }
                       
$salida[] = $silaba . $letras[$j + 1];
                       
$silaba = '';
                       
$j += 2;
                        continue;
                    }
                } else {
                   
$salida[] = $silaba . $letras[$j + 1];
                   
$silaba = '';
                   
$j += 2;
                    continue;
                }
            }
        } elseif (
$estructura[$j] == 'I') {
            if (
in_array($estructura[$j + 1], ['A', 'I'])) {
               
$j += 1;
                continue;
            } elseif (
$estructura[$j + 1] == 'O') {
                if (
in_array($estructura[$j + 2], ['A', 'I', 'L'])) {
                    if (
$letras[$j + 1] == 'd' && $letras[$j + 2] == 'l') {
                       
$salida[] = $silaba . $letras[$j + 1];
                       
$silaba = '';
                       
$j += 2;
                        continue;
                    }
                   
$salida[] = $silaba;
                   
$silaba = '';
                   
$j += 1;
                    continue;
                } else {
                    if (
$letras[$j + 2] == 's' && in_array($estructura[$j + 3], ['L', 'C', 'O'])) {
                       
$salida[] = $silaba . $letras[$j + 1] . $letras[$j + 2];
                       
$silaba = '';
                       
$j += 3;
                        continue;
                    }
                   
$salida[] = $silaba . $letras[$j + 1];
                   
$silaba = '';
                   
$j += 2;
                    continue;
                }
            } else {
                if (
$j + 2 < count($letras)) {
                    if (
in_array($estructura[$j + 2], ['A', 'I'])) {
                       
$salida[] = $silaba;
                       
$silaba = '';
                       
$j += 1;
                        continue;
                    } else {
                        if (
$letras[$j + 2] == 's' && in_array($estructura[$j + 3], ['L', 'C', 'O'])) {
                           
$salida[] = $silaba . $letras[$j + 1] . $letras[$j + 2];
                           
$silaba = '';
                           
$j += 3;
                            continue;
                        }
                       
$salida[] = $silaba . $letras[$j + 1];
                       
$silaba = '';
                       
$j += 2;
                        continue;
                    }
                } else {
                   
$salida[] = $silaba . $letras[$j + 1];
                   
$silaba = '';
                   
$j += 2;
                    continue;
                }
            }
        } elseif (
$estructura[$j] == 'O') {
            if (
in_array($estructura[$j + 1], ['A', 'I', 'L'])) {
               
$j += 1;
                continue;
            } else {
                if (
$letras[$j + 1] == '') {
                   
$salida[] = $silaba;
                    break;
                }
                throw new
Exception("Estructura de sílaba incorrecta en la palabra $word");
            }
        } else {
            if (
in_array($estructura[$j + 1], ['A', 'I'])) {
               
$j += 1;
                continue;
            } else {
                if (
$letras[$j + 1] == '') {
                   
$salida[] = $silaba;
                    break;
                } elseif (
$letras[$j + 1] == 's') {
                   
$salida[] = $silaba;
                   
$silaba = '';
                   
$j += 1;
                    continue;
                }
                throw new
Exception("Estructura de sílaba incorrecta en la palabra $word");
            }
        }
    }
   
   
// Une las sílabas con el separador especificado
   
return implode($sep, $salida);
}

   
// Lista de palabras de prueba
$palabras = [
   
"electroencefalografiquísimamente" => "e-lec-tro-en-ce-fa-lo-gra-fi-quí-si-ma-men-te",
   
"neurorreflejoterapiquísimamente" => "neu-ro-rre-fle-jo-te-ra-pi-quí-si-ma-men-te",
   
"hispanonorteamericanísimamente" => "his-pa-no-nor-te-a-me-ri-ca-ní-si-ma-men-te",
   
"instituto" => "ins-ti-tu-to",
   
"reunir" => "reu-nir",
   
"deshacer" => "des-ha-cer",
   
"casa" => "ca-sa",
   
"aire" => "ai-re",
   
"caos" => "ca-os",
   
"guai" => "guai",
   
"ahí" => "a-hí",
   
"prohibir" => "pro-hi-bir",
   
"guion" => "guion",
   
"alcohol" => "al-co-hol",
   
"rehúso" => "re-hú-so",
   
"aéreo" => "a-é-re-o",
   
"buey" => "buey",
   
"ciudad" => "ciu-dad",
   
"héroe" => "hé-ro-e",
   
"bioquímica" => "bio-quí-mi-ca",
   
"paraguas" => "pa-ra-guas",
   
"zoológico" => "zo-o-ló-gi-co",
   
"poeta" => "po-e-ta",
   
"teoría" => "te-o-rí-a",
   
"radiante" => "ra-dian-te",
   
"inmueble" => "in-mue-ble",
   
"desahucio" => "de-sa-hu-cio",
   
"oír" => "o-ír",
   
"construir" => "cons-truir",
   
"vehículo" => "ve-hí-cu-lo",
   
"pingüino" => "pin-güi-no",
   
"ahínco" => "a-hín-co"
];

// Función para comprobar las separaciones silábicas
function comprobarSilabas($array_palabras) {
   
$resultados = [];
   
    foreach (
$array_palabras as $palabra => $silabas_esperadas) {
       
// Llamamos a la función silabas() para obtener la separación
       
$silabas_obtenidas = silabas($palabra, '-');
       
       
// Comparamos el resultado con el valor esperado en el array
       
if ($silabas_obtenidas === $silabas_esperadas) {
           
$resultados[$palabra] = "Correcto: $silabas_obtenidas coincide con $silabas_esperadas";
        } else {
           
$resultados[$palabra] = "Incorrecto: $silabas_obtenidas no coincide con $silabas_esperadas";
        }
    }
   
    return
$resultados;
}

// Ejemplo de uso (asumiendo que silabificarBasico() existe)
$resultados = comprobarSilabas($palabras);

// Imprimir resultados
foreach ($resultados as $palabra => $resultado) {
    echo
"$palabra - $resultado". "\n";
}


Details

Separador de Sílabas en Español

Este script PHP proporciona una función para separar palabras en español en sus sílabas componentes. Además, incluye una función de prueba para verificar la precisión de la separación silábica en una lista de palabras predefinida.

Funcionalidades

  • silabas($word, $sep = '-'): - Toma una palabra en español como entrada y devuelve una cadena con las sílabas separadas por el separador especificado (por defecto, '-'). - Maneja diptongos, triptongos y hiatos según las reglas de la división silábica del español. - Incluye soporte para caracteres acentuados y caracteres especiales como 'ch', 'll' y 'rr'. - Lanza una excepción si encuentra un carácter no reconocido.
  • comprobarSilabas($array_palabras): - Toma un array asociativo donde las claves son palabras y los valores son las separaciones silábicas esperadas. - Compara la salida de la función `silabas()` con los valores esperados y devuelve un array con los resultados de la comparación.

Uso

  1. Clona el repositorio o descarga el archivo `separa_silabas.php`.
  2. Incluye el archivo `separa_silabas.php` en tu script PHP.
  3. Llama a la función `silabas()` con la palabra que deseas separar en sílabas.

    <?php
    require_once 'separa_silabas.php';
    
    $palabra = "electroencefalografiquísimamente";
    $silabas = silabas($palabra);
    echo $silabas; // Salida: e-lec-tro-en-ce-fa-lo-gra-fi-quí-si-ma-men-te
    ?>
    
  4. (Opcional) Utiliza la función `comprobarSilabas()` para verificar la precisión de la separación silábica en una lista de palabras.

    <?php
    require_once 'separa_silabas.php';
    
    $palabras = [
        "instituto" => "ins-ti-tu-to",
        "reunir" => "reu-nir",
        // ... más palabras
    ];
    
    $resultados = comprobarSilabas($palabras);
    
    foreach ($resultados as $palabra => $resultado) {
        echo "$palabra - $resultado\n";
    }
    ?>
    

Requisitos

  • PHP 7.0 o superior (debido al uso de `mb_strtolower` con el juego de caracteres UTF-8).

Contribución

¡Las contribuciones son bienvenidas! Si encuentras algún error o tienes sugerencias de mejora, por favor, abre un issue o envía un pull request.

Licencia

Este proyecto está bajo la Licencia Apache 2.0. Consulta el archivo LICENSE para más detalles.


  Files folder image Files (4)  
File Role Description
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file README.md Doc. Documentation
Plain text file SeparadorSilabico.php Class Class source
Accessible without login Plain text file separa_silabas.php Example Example script

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads  
 100%
Total:0
This week:0