Officefull.es

Excel, word, powerpoint, android

Separar en Sílabas julio 24, 2010

Separar en Sílabas

En el artículo de hoy os mostraremos dos algoritmos realizados en Excel, para separar en sílabas. Estas sílabas son la segunda unidad más pequeña de nuestra lengua, la primera unidad mínima es la letra para la lengua escrita y el fonema para la lengua hablada. Cuando se juntan estas unidades entre sí, forman las sílabas que son la parte más fundamental de la palabra.

Algoritmo de Héctor Miguel Orozco Díaz ( Con 49 líneas de código VBA para Separar Palabras o frases completas y 54 Líneas de código VBA para Separar palabras de Forma Invertida)

Algoritmo de Adrian Colazo (usuario de los foros Exceluciones, con 295 líneas de código VBA para Separar Palabras).

El archivo Excel de ejemplo que podéis descargaros al final del artículo, está organizado de la siguiente manera:

Hay que habilitar las macros para que el archivo funcione correctamente. Pudiendo utilizar este archivo en todas sus versiones de Excel.

habilitar macros

Módulos de código con las funciones. En el Módulo [ hmod ], están agregadas 2 funciones “emergentes” por si se usan en excel-97 (VBA5).

Modulos Separar Sílabas

#If Not VBA6 Then Function Replace(ByVal Texto As String, ByVal Busca As String, Reemplaza As String) As Variant: Replace = Application.Substitute(Texto, Busca, Reemplaza): End Function Function Split(ByVal Cadena As String, Optional Delimitador As String = " ") As Variant: Split = Evaluate("{""" & Application.Substitute(Cadena, Delimitador, """,""") & """}"): End Function #End If

Columna A:

Algunas reglas

Reglas separar silabas

Fórmula silábica (ataque, núcleo, coda)
[http://es.wikipedia.org/wiki/Sílaba]

formula silabica

Palabras de Ejemplos

Palabras Separar Sílabas

Columna C

Separación de las palabras en Sílabas, función de Adrian.

=Silabas(B3)

Columna D

Esta columna lleva la cuenta de las sílabas que tiene la palabra: =ContarPalabras(B3)

Function ContarPalabras(Texto, Optional sep As String = " ")   ContarPalabras = UBound(Split(Texto, sep)) - (LBound(Split(Texto, sep)) = 0) End Function  

Columna E

En esta columna esta la función que realiza la separación de palabras en sílabas, pudiendo tomar los siguientes argumentos (y sus resultados):
=Silabeado(palabra,divide,invertido)

  • palabra: (requerido) el texto (o celda que lo contiene) con la palabra a “silabear”
  • divide: (opcional) el caracter que se usara en la “salida” de la palabra silabeada (por omision: “-“)
  • invertido: [0/<>0 | verdadero/falso] para invertir las silabas de la palabra (por omision: falso)
Codigo VBA: Function Silabeado(palabra As String, Optional divide As String = "-", Optional invertido As Boolean = False) As String   If Len(palabra) < 3 Then Silabeado = palabra: Exit Function   Dim fue As String, pre As String, sep As String, prefijo As String, coma As String, sufijo As String, n As Integer, reversa: fue = LCase(palabra): pre = Limpia(fue): sep = "": prefijo = "": coma = "": sufijo = ""   If Right(pre, 1) Like resp Then coma = Right(pre, 1): fue = Left(fue, Len(fue) - 1): pre = Left(pre, Len(pre) - 1)   If Right(pre, 1) Like conso Then sufijo = Right(fue, 1): fue = Left(fue, Len(fue) - 1): pre = Left(pre, Len(pre) - 1)   If Left(pre, 3) = "sub" Then If Mid(pre, 4, 1) Like vocal And Len(pre) > 6 And Mid(pre, 4, 5) <> "iendo" Then fue = Mid(fue, 4): pre = Mid(pre, 4): prefijo = "sub" & guion Sig:   If Len(fue) < 2 Then sep = sep & fue: GoTo Fin   If Left(pre, 1) Like vocal Then     If Tong3(Left(pre, 5)) And Not Tong2(Mid(pre, 4, 2)) Then sep = sep & Left(fue, 5): fue = Mid(fue, 6): pre = Mid(pre, 6): GoTo Sig     If Tong3(Left(pre, 4)) And Not Tong2(Mid(pre, 4, 2)) Then sep = sep & Left(fue, 4): fue = Mid(fue, 5): pre = Mid(pre, 5): GoTo Sig     If Tong3(Left(pre, 3)) And Not Tong2(Mid(pre, 4, 2)) Then sep = sep & Left(fue, 3): fue = Mid(fue, 4): pre = Mid(pre, 4): GoTo Sig     If Tong3(Left(pre, 3)) Then sep = sep & Left(fue, 3) & guion: fue = Mid(fue, 4): pre = Mid(pre, 4): GoTo Sig     If Tong2(Left(pre, 3)) And Not Tong2(Mid(pre, 3, 2)) Then sep = sep & Left(fue, 3): fue = Mid(fue, 4): pre = Mid(pre, 4): GoTo Sig     If Tong2(Left(pre, 2)) And Tong3(Mid(pre, 3, 3)) Then sep = sep & Left(fue, 2) & guion: fue = Mid(fue, 3): pre = Mid(pre, 3): GoTo Sig     If Tong2(Left(pre, 2)) And Tong2(Mid(pre, 2, 2)) Then sep = sep & Left(fue, 1) & guion & Mid(pre, 2, 2): fue = Mid(fue, 4): pre = Mid(pre, 4): GoTo Sig     If Tong2(Left(pre, 2)) Then sep = sep & Left(fue, 2) & IIf(Mid(pre, 3, 1) Like vocal, guion, ""): fue = Mid(fue, 3): pre = Mid(pre, 3): GoTo Sig     If Hiato(Left(pre, 2)) Then sep = sep & Left(fue, 1) & guion: fue = Mid(fue, 2): pre = Mid(pre, 2): GoTo Sig     sep = sep & Left(fue, 1): fue = Mid(fue, 2): pre = Mid(pre, 2): GoTo Sig   Else     If Gcon4(Left(pre, 4)) Then sep = sep & Left(fue, 2) & guion & Mid(fue, 3, 2): fue = Mid(fue, 5): pre = Mid(pre, 5): GoTo Sig     If Gcon3(Left(pre, 3)) And Not GconD(Mid(pre, 2, 2)) And Not GconB(Mid(pre, 2, 2)) Then sep = sep & Left(fue, 2) & guion & Mid(fue, 3, 1): fue = Mid(fue, 4): pre = Mid(pre, 4): GoTo Sig     If Gcon3(Left(pre, 3)) And GconD(Mid(pre, 2, 2)) Or GconB(Mid(pre, 2, 2)) Then sep = sep & Left(fue, 1) & guion & Mid(fue, 2, 2): fue = Mid(fue, 4): pre = Mid(pre, 4): GoTo Sig     If GconB(Left(pre, 2)) Or GconD(Left(pre, 2)) Then sep = sep & IIf(Len(sep), guion, "") & Left(fue, 2): fue = Mid(fue, 3): pre = Mid(pre, 3): GoTo Sig     If Gcon2(Left(pre, 2)) Then sep = sep & Left(fue, 1) & guion & Mid(fue, 2, 1): fue = Mid(fue, 3): pre = Mid(pre, 3): GoTo Sig     sep = sep & IIf(Len(sep), guion, "") & Left(fue, 1): fue = Mid(fue, 2): pre = Mid(pre, 2): GoTo Sig   End If Fin:   If invertido Then     reversa = Split(sep, guion): sep = reversa(UBound(reversa)) & sufijo     For n = UBound(reversa) - 1 To LBound(reversa) Step -1: sep = sep & IIf(sep <> "", guion, "") & reversa(n): Next     Silabeado = coma & Replace(sep & IIf(prefijo <> "", "-sub", ""), guion, divide)   Else: Silabeado = Replace(prefijo & sep & sufijo, guion, divide) & coma   End If End Function

Columna F

Esta columna lleva la cuenta de las sílabas que tienen las palabras, utilizando la función [ Function ContarPalabras ]

Columna G

En esta columna se realiza la separación inversa utilizando la [Function Silabeado]

Rango [E35:E39]

= FraseSilabeada(frase,divpal,invpal,divfra,invfra)  frase: la frase a separar en sus silabas (o la celda que la contiene) divpal: el carácter para dividir las silabas de cada palabra (por omisión: "-") invpal: [0/<>0 | verdadero/falso] para invertir las silabas de la palabra (por omisión: falso) divfra: el carácter para dividir las palabras en la frase (por omisión: " ") invfra: [0/<>0 | verdadero/falso] para invertir las palabras en la frase (por omisión: falso) Los ejemplos en el rango [E35:E39] [E35] una farse como ejemplo: => esta frase contiene varias palabras [E36] =FraseSilabeada(E35) => es-ta fra-se con-tie-ne va-rias pa-la-bras [E37] =FraseSilabeada(E35,,1) => ta-es se-fra ne-tie-con rias-va bras-la-pa [E38] =FraseSilabeada(E35,,,,1) => pa-la-bras va-rias con-tie-ne fra-se es-ta [E38] =FraseSilabeada(E35,,1,,1) => bras-la-pa rias-va ne-tie-con se-fra ta-es

Separar palabras y frases en sílabas

Descarga del Archivo de ejemplo para pruebas:

 Separar Silabas (44.8 kB)

 

Categorías: Sin categoría

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *