Identificación de segmentos textuales
Después de seleccionar el texto a automatizar, algo que no debería resultar complicado ya que materia prima tenemos en abundancia, procedemos a identificar los diferentes segmentos y prepararlos para automatizar su conversión en elementos de la matriz-base.
Las apariencias engañan, y las palabras anteriores pueden encubrir más dificultad de la que se quiere informar. No lo digo por eso de elegir el documento-base, que tampoco es tan sencillo como lo pinto (algo de trabajo lleva quedarse con aquel ejemplar que más nos satisface); lo digo por el trabajo que supone eliminar del documento todo aquello que no es el núcleo de contenido textual o que no es recomendable abordar mediante este procedimientos de automatización (1), tarea esta que resulta imprescindible para entregar un documento que se pueda manejar mediante código.
Resuelta esta cuestión (que tampoco es insalvable), es posible realizar la revisión del contenido, entendiendo por tal la identificación de los diferentes segmentos, de los cuales identificaremos su fin mediante una marca formada por caracteres que sean reconocidos como tales por las funciones de cadena y que, a la vez, no sea posible que se encuentren como parte del propio texto, ya que, en ese caso, se producirían segmentaciones no deseadas.
Por partir de una referencia concreta que tiene la virtud de haber sido planteada desde otras perspectivas de trabajo y que, además presenta un cuerpo textual que no ofrece dificultad, pero que como documento no se puede afrontar únicamente desde esta opción de automatización, voy a plantear el trabajo sobre una sección del documento-soporte llamado Becas NEE (2).
Lo que del proceso anterior deriva del documento-base en un cuerpo textual es lo que se recoge [en esta entrada] y que queda aquí simplificado como sigue (3):
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. Joaquín González López, orientador del EOE de Avilés emite el siguiente informe específico correspondiente al alumno Antonio Jiménez Montoya, escolarizado en el centro CP Piedras Blancas. 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 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.
El código basado en la función Split() que se necesita para realizar la segmentación del texto (una cadena al fin y al cabo) ya ha sido explicada [en esta entrada] pero antes de crearlo deberemos plantear dos cuestiones: dónde ubicar el texto y cómo tratar determinadas partes del mismo.
La primera de estas cuestiones es de orden práctico y tiene que ver con el diseño del soporte, pero también con cómo conceptualizamos el procedimiento de automatización, entendiendo por esta segunda consideración la posibilidad de que nos lo planteemos como algo que corresponde desarrollar directamente al profesional, como parte de sus responsabilidades y en función de las competencias informáticas que ha adquirido.
Esto supone ir más allá de que un profesional especialmente y extraordinariamente competente cree un docap y lo ponga a disposición del resto de los compañeros para que ellos, meros usuarios, lo utilicen en su trabajo.
Cabe esta opción, evidentemente, pero el actual planteamiento también hace posible esta otra: cada uno de nosotros, yo mismo, como orientadores somas capaces de desarrollar procedimientos de automatización de cualquier documento profesional, vg. este documento concreto, para uso personal y/o del colectivo. Cierto que puedo cederlo a otro/s compañero/s, pero inicialmente está pensado en función de mis necesidades, por lo que está adaptado a mi (personalizado) (4). Para crearlo yo orientador hago uso de mis conocimientos de OOo Basic, lenguaje que utilizo tanto para crear y desarrollar el procedimiento como para manejarlo una vez creado. Uso OOo Basic y los servicios OpenOffice que necesito (en este caso Calc y Writter).
La consecuencia de todo ello es que opto por automatizar determinado documento (ahora el que he presentado antes) para lo que empiezo por trabajar sobre su contenido textual después de realizar una copia del mismo en Writer (primera fase del procedimiento). Una vez adaptado introduzco los marcadores de los segmentos (#), que sitúo al final de los mismos.
La segunda parte de esta fase consiste en el traslado del texto creado a Calc, servicio sobre el que, por motivos de eficiencia, se desarrollaré las restantes partes del procedimiento, a excepción de la última, en la que, por motivos obvios (5), volveré a utilizar Writer.
En teoría, tras lo hecho y expuesto ya estamos en disposición de iniciar la segunda fase del procedimiento, pero antes de llevar la teoría a la práctica me debo plantear una cuestión importante, derivada de la distinción entre personalización (en función del profesional como usuario) y automatización. Me explico:
Ciertos segmentos del texto-base...
D. Joaquín González López, orientador del EOE de Avilés emite el siguiente informe específico correspondiente
... pueden ser personalizados, ya que se refieren al profesional que realiza el informe, que será siempre el mismo (6). Partimos de la anterior consideración, así como de valorar las repercusiones que tiene no personalizar el documento en lo que afecta al tratamiento de variables-input y de variables-condicionadas (7); añado también la conveniencia de aplicar el principio de simplicidad, que se concreta como transformación del componente más complejo al más simple, y que en este caso consiste en tratar esos segmentos como texto fijo. Por todo ello planteo que antes de abordar la segmentación conviene realizar la personalización del texto.
Este proceso consiste en sustituir el nombre y apellidos del OE del documento-base por el nuestro, así como el de mi SEO. En consecuencia, en función de mi género, modifico las variables gramaticalmente condicionadas, esto es, tratamiento de cortesía (D vs Dª) y denominación profesional (orientador vs orientadora). El resultado es que me ahorro tratar 5 variables y convierto una frase compleja en un único segmento textual calificado como texto fijo (tf) (8).
Tras lo anterior, aplicando el procedimiento de identificación y marcado de los segmentos textuales, obtengo el siguiente texto-base que queda recogido en el documento Writer auxiliar (AutoDocTxt.odt), cuyo contenido es el siguiente (9):
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. Joaquín
González López, orientador del EOE de Avilés emite
el siguiente informe específico correspondiente#al alumno#Antonio#Jiménez
Micó#,#escolarizado#en
el centro#CP
Piedras Blancas.##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 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.
Ahora podemos trasladar manualmente (copiar y pegar) el texto-base a una hoja de cálculo sin más, pero también podemos hacerlo a un documento Calc previamente acondicionado (10), lo cual es, cuanto menos, aconsejable por el adelanto de trabajo que nos supone. También podemos crear un script que automatice el copia-pega, que podremos utilizar en posteriores ocasiones, con las debidas modificaciones. Ese script se podría implementar sobre el documento Writer o sobre Calc, opción que elijo en este caso (11). Este es el script (12):
Dim mOpciones(0) As New "com.sun.star.beans.PropertyValue"
'Acceder al documento. Sustituir la ruta por la propia.
sRuta = ConvertToUrl(Ruta_absoluta_del_documento & NombreDoc & ".odt")
oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )
'Copiar el contenido del documento AutoDocTxt
document = ODoc.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:GoToStartOfDoc", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:EndOfDocumentSel", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dim documentCalc as object
documentCalc = ThisComponent.CurrentController.Frame
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
dispatcher.executeDispatch(documentCalc, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(documentCalc, ".uno:Paste", "", 0, Array())
'Cerrar el documento Writer que contiene el texto
NOTAS
(1) Esto puede suponer una dificultad de mayor calado de lo que ahora se puede considerar, ya que lo que aquí se presenta es una forma simplificada de desarrollar el procedimiento. Cuando nos enfrentemos a situaciones reales veremos cómo las abordamos. Adelantar ahora que una posible solución puede ser emplear procedimientos mixtos.... pero hay más opciones.
(2) Este documento consta originalmente en versión digitalizada sobre Word a modo de plantilla. Posteriormente reelaboré el anterior como plantilla LO-Writer, pero también desarrollé un docap basado en OOo Basic y en el uso de marcadores (modelo de automatización asimilable a la categoría carátula). [Este docap es accesible desde este enlace]. (3) Obsérvese que se presenta como bloque textual único y que se usa # como marcador de los segmentos textuales.
(4) Es perfectamente posible concretar este planteamiento también como resultado del trabajo en grupo, aunque cada uno de sus componentes deberá realizar su propia personalización.
(5) Trasladar a Writer el texto personalizado para obtener el documento final.
(6) Desde la perspectiva del profesional informáticamente competente que nos hemos planteado esto es siempre así; pero incluso en caso de que se de 4, o de que yo ceda mi trabajo a otro compañero, también es abordable como planteo ahora. Lógicamente cabe la posibilidad de desarrollarlo todo desde la perspectiva del docap tradicional y como resultado de la omisión de la diferenciación personalización-automatización, aunque tiene su coste en términos de complejidad del manejo del procedimiento mediante código.
(7) Recuerdo que con ellas me refiero a los segmentos textuales condicionados gramaticalmente, en este caso en función del género (masculino-femenino) del OE.
(8) Además del ahorro de programación que hemos observado, también está la simplificación del tratamiento de las variables-condicionadas que restan, ya que ahora sólo existe un elemento condicionante, la variable-input nombre del alumno. De no realizar la fase de personalización anterior, nos deberíamos plantear la existencia de dos condicionantes, con las consecuencias que esto tiene para el planteamiento del código de tratamiento de las variables-input y de las variables-condicionadas gramaticalmente.
(9) Se asume en este caso que coinciden los datos personalizables con los iniciales. Obsérvese que el marcador # se pega al final del segmento identificado, ocupando el espacio que existe entre esta posición y el inicio del segmento que sigue; esto es: sin espacio intermedio en ambos casos.
(10) Nombre del documento, nombre de la hoja receptora y ajuste de la celda a la que trasladaremos el texto. También podemos definir en ella un módulo para trabajar posteriormente desde el IDE.
(11) No es un script independiente del servicio, por lo que si optamos por implementarlo en Writer deberemos modificarlo. Yo prefiero hacerlo sobre Calc dado que ese documento deberá ser trabajado desde el IDE, con lo que esto implica; así nos ahorramos hacerlo desde dos de los documentos con los que trabajaremos. Esto conlleva desarrollar al completo el proceso indicado en (10).
(12) Obsérvese que es una combinación de macro y script. A parte de tratar la cuestión en una entrada específica, los comentarios que contiene hacen innecesario que dediquemos aquí tiempo a explicar su funcionamiento. Señalar, eso sí, que deberemos utilizarlo directamente desde el IDE o desde la funcionalidad Herramientas | Macros | Ejecutar macro