PHP Classes

File: separa_silabas.php

Recommend this page to a friend!
  Classes of Juan Camacho   Silabas   separa_silabas.php   Download  
File: separa_silabas.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Silabas
Separate syllables in Spanish
Author: By
Last change:
Date: 7 days ago
Size: 11,426 bytes
 

Contents

Class file image Download
<?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"; }