martes, 12 de agosto de 2025

Textos. Procedimientos

Varios segmentos gramaticalmente condicionantes (I)


Aunque la forma en que se presentó esta propuesta fue la forma más simple, no sin antes simplificar para de su contenido recurriendo a la personalización, lo cierto es que los documentos normalmente no son tan simples, siendo lo común que las vg están condicionadas por diferentes vi. Cierto que siempre que podamos es conveniente simplificar lo complejo, pero también tenemos que hacer frente a esa complejidad. En esta entrada trabajaremos sobre la fase de preparación del texto.


Para mantener controlado el nivel de dificultad te propongo que desandemos parte del camino recuperando nuestro texto-base a la condición original de texto no personalizado (1). Con algunos cambios, pertinentes para los objetivos actuales, este podría ser el nuevo texto-base:

A efectos de participación en la convocatoria de ayudas para alumnado con necesidad específica de apoyo educativo del Ministerio de Educación Cultura y Deporte, para el curso académico#2020/2021#.##Dª#Mercedes#Gómez García#,#orientadora#del#EOE del Caudal#emite el siguiente informe específico correspondiente#al alumno#Antonio#Jiménez Montoya#,#escolarizado#en el centro#CP Lolo Veguina#.##Según consta en el Dictamen de escolarización fechado el#12/10/2019#,#Antonio#es un alumno#con NEE derivadas de#discapacidad auditiva#que requiere apoyos de #Audición y Lenguaje y de Pedagogía Terapéutica#.##En este informe se especifica la asistencia educativa que requiere#el alumno#, así como las condiciones que debe reunir ésta para garantizar la debida atención de las necesidades educativas específicas que presenta.#

He diferenciado los posibles segmentos variables de los segmentos de texto fijo en lo que en el texto-base anterior resultaba de aplicar el principio de personalización y de cambiado los datos de la (ahora) orientadora para afrontar mejor la automatización del texto y para adaptarlo a la realidad: son más numerosas las orientadoras que los orientadores, así que es más habitual encontrarnos con el manejo del femenino en este caso (2)

El proceso que sigue es el mismo que en el proyecto básico hasta culminar la categorización de los diferentes segmentos, que ahora son más, al incrementarse los tf, pero también las vi y las vg, como podrás ver si comparas el listado de categorización actual con el anterior.

Primero activamos el script  CopiarTexto para cargar en A1 de la Hoja TextoBase del soporte el texto marcado procedente del documento AutoDocTxt (3) y después podemos trabajar con el script MatrizBase, que se puede desarrollar sin modificaciones hasta la generación del listado de preguntas sobre las vi, pero bien en ese punto o incluso mejor en el anterior, es necesario implementar el procedimiento de identificación de las variables vi-condicionantes y, a continuación, la relación de dependencia que se establece entre ellas y las vg.

Resulta evidente que este cambio implica una modificación importante del resto del código, aunque la lógica del funcionamiento sigue siendo básicamente la misma. En este script no voy a realizar todas esas posibles modificaciones, sino las que resultan esenciales para la adaptación de la fase preparatoria del modelo (4). Aun así es necesario detenerse en las implicaciones que suponen estos cambios, tarea a la que dedicaré esta entrada.

Veamos en primer lugar cómo queda el script central de la fase preparatoria:

Sub MatrizBase 
'Accedo a la hoja TextoBase
Dim oHoja As Object
oHoja = ThisComponent.getCurrentController.getActiveSheet()
'... a la celda A1 que contiene el texto
Dim oTexto As Object
oTexto = oHoja.getCellRangeByName( "A1" )
'... y al contenidos de esa celda (A1)
Dim sTexto As String
sTexto = oTexto.getString()
'Dividio el texto en segmentos mediante la función Split()
Dim sSepara As String
Dim mSegmentos() As String
Dim SegTxt As String
Dim i As Integer
Dim n As Integer
sSepara = "#"
mSegmentos = Split(sTexto(),sSepara)
'Elimino los espacios mediante la función Trim()
For i = LBound(mSegmentos()) To UBound(mSegmentos())
SegTxt = mSegmentos(i)
mSegmentos(i) = Trim(SegTxt)
n = i+1 'Obtengo la longitud de la matriz mSegmentos()
Next
'Categorizo los segmentos textuales
'tf -> texto fijo
'vi -> variable-input y vatiable-condicionada
'vg -> variable-gramatical
'vn -> variable nombre
'Creo las matrices complementarias:
    ' mTipos() -> para categorización de los segmentos
    ' mCuestionario -> para interface con usuario sobre vi
Dim mTipos(n) As String, mCuestionario(n) As String
'Identifico las categorías de los segmentos textuales (mTipos())
For i = LBound(mSegmentos()) To UBound(mSegmentos())
If mSegmentos(i) = "" Then
mTipos(i) = "sl"
ElseIf mSegmentos(i) = "," or mSegmentos(i) = "."  or mSegmentos(i) = ";" Then
mTipos(i) = "sp"
Else
mTipos(i) = InputBox(mSegmentos(i),"Categorización de los segmentos textuales","tf-vi-vg-vn")
End If
Next
'Cuestionario para interface respecto a vi (mCuestionario())
For i = LBound(mSegmentos()) To UBound (mSegmentos())
If mTipos(i) = "vi" Then
mCuestionario(i) = InputBox (mSegmentos(i) & Chr(13),"Cuestionario para facilitar la entrada de datos")
End If
Next
'INICIO de la primera fase del modelo complejo ===================
'Indico cuantas vi-condicionantes presenta el texto-base
Dim nVicond As Integer
Dim ii As Integer
Dim idVi As Integer
'Y preparo la estructura de matrices para recoger la información asociada: contenido, posición en la matriz-base y género gramatical
Dim mViCondCont() As String
Dim mViCondPos() As Integer
Dim mViCondGen() As String
'Identifico número vi-Cond
nVicond = CInt(InputBox("Número de variables presentes en este texto","Identificación de vi-condicionantes"))-1
'... y dimensiono las matrices
ReDim mViCondCont(nVicond)
ReDim mViCondPos(nVicond)
ReDim mViCondGen(nVicond)
'Identifico visualmente las vi-Cond y creo el contenido para las matrices
For ii = 0 To UBound(mViCondPos())
For i = 0 To UBound(mSegmentos())
If mTipos(i) = "vi" Then
idVi = MsgBox("¿Es vi-condicionante " & mSegmentos(i) & "?" ,4 + 32,"Valoración de la concordancia gramatical")
If idVi = 6 Then
mViCondPos(ii) = i
mViCondCont(ii)= mSegmentos(i) 
Exit For
End If
End If
Next
Next
'Creo la matriz mVGDependencia() para contener la asociación vi-condicionante -> vg
Dim mVgDependencia() As integer
Dim IdDep As Integer
ReDim mVgDependencia(UBound(mSegmentos()))
For i = 0 To UBound(mViCondPos())
For ii = 0 To UBound(mVgDependencia())
If mTipos(ii) = "vg" Then 
IdDep = MsgBox("¿Está vg " & mSegmentos(ii) & "(" &mTipos(ii) &")" & " condicionada gramaticalmente por " & mViCondPos(i) & " - " & mViCondCont(i) & "?" ,4 + 32,"Identificación de la relación de dependencia entre vi-Condicional y vg")
If IdDep = 6 Then
mVgDependencia(ii) =  mViCondPos(i)
End If
End If
Next
Next
'FIN de la primera fase del modelo complejo=====================
'Creo la hoja MatrizBase
Dim oHojas As Object
oHojas = ThisComponent.getSheets()
oHojas.insertNewByName("MatrizBase", 2)
Dim oHojaMatrizBase As Object
oHojaMatrizBase = ThisComponent.getSheets().getByName("MatrizBase")
' Copio la matriz mSegmentos() en la columna A
For i = LBound(mSegmentos()) To UBound (mSegmentos())
oTextoMatriz = oHojaMatrizBase.getCellRangeByName( "A" & i+1 )
oTextoMatriz.setString(mSegmentos(i))
Next
'Copio la matriz mTipos() en la columna B
For i = LBound(mTipos()) To UBound (mTipos())
oTextoMatriz = oHojaMatrizBase.getCellRangeByName( "B" & i+1 )
oTextoMatriz.setString(mTipos(i))
Next
'Copio matriz mVgDepencia() en la columna C
For i = LBound(mVgDependencia()) To UBound (mVgDependencia())
oTexto = oHojaMatrizBase.getCellRangeByName( "C" & i+1 )
oTexto.setString(mVgDependencia(i))
Next
'Copio la matriz mCuestionario() en la columna D
For i = LBound(mCuestionario()) To UBound (mCuestionario())
oTexto = oHojaMatrizBase.getCellRangeByName( "D" & i+1 )
oTexto.setString(mCuestionario(i))
Next
'INICIO de la segunda fase del modelo complejo===============
'Identifico el género de las vi-Cond consultando la BDNombres (funciconGen)
For i = 0 To UBound(mViCondGen())
mViCondGen(i) = CondGen(mViCondCont(i))
Next
'FIN de la segunda fase del modelo complejo===================
'INICIO de la tercera fase del modelo complejo=================
'Creo la base de datos de vi-condicionantes: numId - Contenido - Género gramatical del nombre
Dim oId As Object,oPosId As Object, oPosCon As Object, oPosGen As Object
'Creo la hoja CondicGen
oHojas.insertNewByName("CondicGen", 3)
'Posiciono los contenidos de en la hoja CondicGen
Dim oHojaCond As Object
oHojaCond = ThisComponent.getSheets().getByName("CondicGen")
For i = 0 To UBound(mViCondPos())
oId = oHojaCond.getCellRangeByName( "A"& (i+1))
oId.SetString("vi-condicionante " & (i+1))
oPosId = oHojaCond.getCellRangeByName( "B"& (i+1))
oPosId.setValue(mViCondPos(i))
oPosCon = oHojaCond.getCellRangeByName( "C"& (i+1))
oPosCon.setString(mViCondCont(i))
oPosGen = oHojaCond.getCellRangeByName( "D"& (i+1))
oPosGen.setString(mViCondGen(i))
Next
'FIN de la tercera fase del modelo complejo==================
End Sub

En el script quedan identificadas las modificaciones realizadas respecto al script del modelo básico, indicando en los comentarios las funciones que cumplen, las cuales paso a resumir a continuación: 

  • El inicio de este procedimiento implica identificar (indicar) el número de vi que condicionan a las vg del texto-base. Este dato se solicita al profesional (5) mediante InputBox() (nVicond = CInt(InputBox("Número de variables presentes en este texto","Identificación de vi-condicionantes"))-1) y con él se dimensionan las matrices en las que se recogerán los datos (Id-posición, contenido y género) (vg. ReDim mViCondCont(nVicond)). Lo que resta es identificar las Vi-condicionantes, cosa que ejecuta el profesional con ayuda de un buce For de estructura compleja (For ii = 0 To UBound(mViCondPos())), e identificar a qué vi-cond está asociada cada vg, cosa que también requiere del profesional y del recurso a estructuras cíclicas y condicionales anidadas (6)
  • La segunda fase consiste en identificar el género de las vi-Condicionantes, lo que resuelvo con la función CondGen() (mViCondGen(i) = CondGen(mViCondCont(i))) que trabaja con BDNombres, aunque ahora en base a  un ciclo que recorre las vi-condicionantes identificadas en el texto (For i = 0 To UBound(mViCondGen()))
  • Finalmente, la tercera fase consiste en generar una pequeña base de datos sobre el mismo soporte (hoja CondicGen) que contiene los datos de las vi-condicionantes que son necesarios para la ejecución del DocAp (fase B del modelo). También en este caso trabajamos con un bucle (For i = 0 To UBound(mViCondPos())), aunque previamente debemos crear la hoja (oHojaCond = ThisComponent.getSheets().getByName("CondicGen"))
Con esto finaliza la actualización de script principal de la fase A del modelo (Sub MatrizBase) en su versión compleja. En una segunda entrada trabajaremos sobre cómo implementar esta versión sobre el script principal de la fase B (DocAp) (7).

Espero a esa segunda entrada para proporcionarte acceso al documento Calc resultante. Por ahora te tendrás que conformar con el script anterior. Puedes hacer muchas cosas con él, te lo aseguro.


NOTAS

(1) Esto no supone negar validez a la personalización, que mantiene toda su validez; se trata de una propuesta para plantear una condición de partida que cumpla con el criterio que se plantea: varias vi-condicionantes en un mismo texto.
(2) No sucede lo mismo con el alumnado NEE, así que mantengo éste en masculino, aunque modifico los datos (falso) personales y de escolarización (igualmente falsos e inventados, lo mismo que los de la OE, por cierto).
(3) si quieres verlo íntegro en esa hoja es posible que necesites readaptar la extensión de esa celda o ampliar la zona mediante la unión de celdas. De todas formas es únicamente a efectos de visualización, ya que el código siguiente funciona igual.
(4) Dejo fuera la modificación del script principal de la fase DocAp, así como las que sean necesarias en el código resultante de las propuestas de mejora.
(5) Recuerda que estamos en la fase preparatoria, en la que actúa el profesional como agente de la construcción de la solución. En la segunda fase o de DocAp, el profesional pasa a actuar como usuario.
(6) A parte del interés que puede tener estas estructuras complejas, señalar también que son susceptible de mejora en cuanto a la información referencial que ofrece, que posiblemente resulte menos comprensible de lo que sería deseable, pero también respecto al propio funcionamiento, aunque a día de hoy no dispongo de alternativa a la forma en que se ha concretado su codificación. 
(7) Repito que también en las propuestas de mejora tratadas anteriormente tiene consecuencias trabajar con varias vi-condicionantes, pero tampoco en esa segunda entrada las tendremos en cuenta, quedando pendiente hacerlo cuando desarrollemos una aplicación práctica verdaderamente funcional del modelo.

No hay comentarios:

Publicar un comentario

Comenta esta entrada