domingo, 10 de agosto de 2025

Textos. OOo Basic

Cambio de palabras mediante matrices


Hay ocasiones en las que nos interesa cambiar unas palabras por otras en un texto de forma automática; un ejemplo puede ser cuando deseamos expresar en femenino lo que está en masculino (o viceversa) o en plural lo que está en singular (y viceversa). Para ello podemos aplicar procedimientos basados en condicionales, pero éstos presentan limitaciones en cuanto a generalización (cuando la condicionalidad va asociada a la aplicación de reglas) o debido a un alto coste de codificación y procesamiento. La alternativa del uso de matrices es una alternativa interesante, como veremos en esta entrada.


Pondré un ejemplo relativamente sencillo y concreto en el que esta estrategia se usa para cambiar palabras de masculino a femenino, después de haber segmentado la frase original para obtener una matriz con las palabras que la componen.

Sub CambioPalMatiz

Dim sFraseOr As String
Dim mMatrizOr() As String
Dim mMasc() As String, mFem() As String
Dim sFraseFem As String
Dim i As Integer, ii As Integer

'Frase original
sFraseOr = "el alumno estudia matemáticas"

'Matriz de palabras en masculino
mMasc() = Array("el","un","al","del","niño","alumno")

'Matriz de palabras en femenino
mFem() = Array("la","una","a la","de la","niña","alumna")

'Segmento la frase original en las palabras que la componen
mMatrizOr() = Split(sFraseOr)

'Comparo el contenido sobre la matriz mMasc()
For i = 0 To UBound(mMatrizOr())
For ii = 0 To UBound(mMasc())
If mMatrizOr(i) = mMasc(ii) Then
mMatrizOr(i) = mFem(ii)
Exit For
End If
Next
Next

'Reconstruyo la frase ahora en femenino y la muestro mediante MsgBox()
sFraseFem = Join (mMatrizOr())
MsgBox (sFraseFem)

End Sub

En esta propuesta es importante que las matrices mMasc() y mFem() estén ajustadas a las frases que se dan como entradas, cosa que se puede hacer de varias maneras, aunque aquí la que se propone es la más simple: incrementar el listado de los arrays (mMasc() = Array("el","un","al","del","niño","alumno")).

Una vez contamos con las matrices necesarias (incluyendo la construcción de la derivada de la frase de entrada mediante la función Split() (mMatrizOr() = Split(sFraseOr)), es la estructura de bucles For anidados la responsable de ir comparando los elementos de esa matriz derivada con los elementos de la matriz a comparar (mMas() en este caso, pero no necesariamente) mediante un condicional (If mMatrizOr(i) = mMasc(ii) Then), devolviendo, en su caso, el término equivalente en femenino, reasignado a la posición del elemento de la matriz derivada (mMatrizOr(i) = mFem(ii)).

Finalizamos el procedimiento volviendo a presentar como frase los componentes de la matriz derivada de la original, que ahora presenta las palabras masculinas sustituidas por sus equivalentes en femenino (sFraseFem = Join (mMatrizOr()))

No hay comentarios:

Publicar un comentario

Comenta esta entrada