Varios segmentos gramaticalmente condicionantes (I)
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.
Sub MatrizBase
'Accedo a la hoja TextoBaseDim oHoja As ObjectoHoja = ThisComponent.getCurrentController.getActiveSheet()'... a la celda A1 que contiene el textoDim oTexto As ObjectoTexto = oHoja.getCellRangeByName( "A1" )'... y al contenidos de esa celda (A1)Dim sTexto As StringsTexto = oTexto.getString()'Dividio el texto en segmentos mediante la función Split()Dim sSepara As StringDim mSegmentos() As StringDim SegTxt As StringDim i As IntegerDim n As IntegersSepara = "#"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 viDim 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) = "" ThenmTipos(i) = "sl"ElseIf mSegmentos(i) = "," or mSegmentos(i) = "." or mSegmentos(i) = ";" ThenmTipos(i) = "sp"ElsemTipos(i) = InputBox(mSegmentos(i),"Categorización de los segmentos textuales","tf-vi-vg-vn")End IfNext'Cuestionario para interface respecto a vi (mCuestionario())For i = LBound(mSegmentos()) To UBound (mSegmentos())If mTipos(i) = "vi" ThenmCuestionario(i) = InputBox (mSegmentos(i) & Chr(13),"Cuestionario para facilitar la entrada de datos")End IfNext'INICIO de la primera fase del modelo complejo ==================='Indico cuantas vi-condicionantes presenta el texto-baseDim nVicond As IntegerDim ii As IntegerDim 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 gramaticalDim mViCondCont() As StringDim mViCondPos() As IntegerDim mViCondGen() As String'Identifico número vi-CondnVicond = CInt(InputBox("Número de variables presentes en este texto","Identificación de vi-condicionantes"))-1'... y dimensiono las matricesReDim mViCondCont(nVicond)ReDim mViCondPos(nVicond)ReDim mViCondGen(nVicond)'Identifico visualmente las vi-Cond y creo el contenido para las matricesFor ii = 0 To UBound(mViCondPos())For i = 0 To UBound(mSegmentos())If mTipos(i) = "vi" ThenidVi = MsgBox("¿Es vi-condicionante " & mSegmentos(i) & "?" ,4 + 32,"Valoración de la concordancia gramatical")If idVi = 6 ThenmViCondPos(ii) = imViCondCont(ii)= mSegmentos(i)Exit ForEnd IfEnd IfNextNext'Creo la matriz mVGDependencia() para contener la asociación vi-condicionante -> vgDim mVgDependencia() As integerDim IdDep As IntegerReDim mVgDependencia(UBound(mSegmentos()))For i = 0 To UBound(mViCondPos())For ii = 0 To UBound(mVgDependencia())If mTipos(ii) = "vg" ThenIdDep = 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 ThenmVgDependencia(ii) = mViCondPos(i)End IfEnd IfNextNext'FIN de la primera fase del modelo complejo====================='Creo la hoja MatrizBaseDim oHojas As ObjectoHojas = ThisComponent.getSheets()oHojas.insertNewByName("MatrizBase", 2)Dim oHojaMatrizBase As ObjectoHojaMatrizBase = ThisComponent.getSheets().getByName("MatrizBase")' Copio la matriz mSegmentos() en la columna AFor i = LBound(mSegmentos()) To UBound (mSegmentos())oTextoMatriz = oHojaMatrizBase.getCellRangeByName( "A" & i+1 )oTextoMatriz.setString(mSegmentos(i))Next'Copio la matriz mTipos() en la columna BFor i = LBound(mTipos()) To UBound (mTipos())oTextoMatriz = oHojaMatrizBase.getCellRangeByName( "B" & i+1 )oTextoMatriz.setString(mTipos(i))Next'Copio matriz mVgDepencia() en la columna CFor i = LBound(mVgDependencia()) To UBound (mVgDependencia())oTexto = oHojaMatrizBase.getCellRangeByName( "C" & i+1 )oTexto.setString(mVgDependencia(i))Next'Copio la matriz mCuestionario() en la columna DFor 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 nombreDim oId As Object,oPosId As Object, oPosCon As Object, oPosGen As Object'Creo la hoja CondicGenoHojas.insertNewByName("CondicGen", 3)'Posiciono los contenidos de en la hoja CondicGenDim oHojaCond As ObjectoHojaCond = 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"))
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.

No hay comentarios:
Publicar un comentario
Comenta esta entrada