Mostrando entradas con la etiqueta Manipulación de contenidos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Manipulación de contenidos. Mostrar todas las entradas

miércoles, 15 de abril de 2026

DATOS. Manipulación

Datos semi-estructurados

Tratamiento ofimático

Antes de contar con recursos para manejar los datos que hemos llamado semi-estructurados y entre los que figuran aquellos que proceden de tablas insertadas en documentos de texto, todo el proceso se realizaba "manualmente", aunque sería más apropiado decir que mediante procedimientos ofimáticos. Dado que lo que se pretende en esta sub-sección de DATOS Y TEXTOS es automatizar el procedimiento (en la medida de lo posible) es muy conveniente recordar los orígenes, ya que nos van a servir como punto de referencia.

Empecemos por decir que, ya sea en documentos generados con un procesador de texto o en otro en formato .pdf, las primeras tablas con las que hemos trabajado han estado originalmente en este formato, cumpliendo funciones de formulario o como recurso para estructurar la presentación de la información. Esto es importante decirlo, ya que pudiera parecer que en el principio estuvieron las hojas de cálculo, cuando en realidad han sido un recurso incorporado tarde, mál y pobremente, y no pocas veces de forma un tanto obligada o forzada por demandas externas de rendición de cuentas (estadillos pedidos de NEE y documentos similares solicitados por la autoridad, sea esta quien fuera, los cuales no siempre se presentaban en una hoja de cálculo).

Por diversas causas, a veces esos datos contenidos en tablas-Word han terminado formando parte de una tabla excel, proceso que hace tiempo fue ocasional y que actualmente es mucho más frecuente, pero que en cuanto a procedimiento aun sigue sin ser resuelto de forma sistemática, y eso que, salvo que se empleen procedimientos específicos, ofimáticos o basados en script, lo cierto es que, aunque no presenta mayor dificultad, sí consume demasiado tiempo.

Veamos en qué puede consistir el procedimiento manual-ofimático, partiendo de disponer ya de una copia en texto del contenido de las tablas-Word, resultado de aplicar las funcionalidades Seleccionar->Copiar. Aunque caben varias opciones, para evitar que se copien elementos gráficos no deseados, propongo pegar el contenido en un documento .txt (utilidad Bloc de notas, por ejemplo) como segundo paso.

Lo normal es que lo que se copie reproduzca grosso modo la distribución original del texto, lo que no es aceptable en términos de transformación de los datos en datos estructurados. Por eso motivo propongo actuar manualmente sobre el documento .txt para transformar el contenido en una sucesión de líneas de texto etiqueta-dato, lo que supone eliminar muchos espacios en blanco, diferenciar bloques etiqueta-dato que pueden aparentar ser una unidad, separarlos por líneas y hasta transformar algunos contenidos (por ejemplo las "X" que simulan la elección de una (aparente) opción.

Debo decir que si la tabla cuenta con elementos de formulario es posible que esta estrategia no funcione bien, pero de momento vamos a apartar este tipo de situaciones para no complicar innecesariamente la explicación. Por ahora, los controles de formulario nos obligan a reconstruir el contenido manualmente, así que cuantos menos controles de formulario tenga nuestra tabla mejor para nosotros.

También vamos a eludir ahora la necesidad de valorar algunas opciones de estructuración de los datos cuando se plantean varios como opcionales, tomando provisionalmente partido por la opción más simple: mantener sólo la opción elegida y eliminar el resto.

Una vez asumidas estas opciones y organizados los datos según los criterios antes indicados, dispondermos de un documento .txt simple. De uno o de varios, dependiendo de si optamos por tratar toda la información como un único bloque de datos, o diferenciar cada una de las tablas que originalmente presentaba el documento. Y digo esto porque, de optar por la segunda posibilidad considero preferible diferenciar cada bloque-tabla en un archivo .txt diferente y seguir el procedimiento de transformación también de forma diferenciada. Así mantenemos la unidad de procedimiento y eliminamos espacios en blanco inncesarios o diferenciadores de tablas que a la larga terminan creando confusión en el acceso a los datos.

Partiendo en este caso de la unidad de conjunto de los datos, lo que equivale a considerarlos como una tabla única, una vez limpio el documento .txt (el cual guardaremos al menos provisionalmente hasta disponer de la base de datos/tabla Excel), ejecutamos Seleccionar todo-Copiar, creamos un documento word (Writer) y pegamos el contenido copiado antes en el portapapeles.

Fíjate que usamos el procesador de texto y no directamente la hoja de cálculo para evitar posibles errores en la gestión de la información (que se copie todo el texto en una celda o la pareja etiqueta-dato en una misma celda. Si trasladamos los datos al procesador de texto, podremos realizar una manipulación previa al traslado a la hoja de cálculo que evitará esos problemas de gestión. No obstante, es posible que la copia directa del contenido del .txt en Excel-Calc se resuelva satisfactoriamente y se genere automáticamente un listado vertical en el que se diferencian en sendas celdas la etiqueta y el dato.

Si no ese el caso, o si no quieres correr riesgos, lo que deberás hacer es separar TODAS las parejas etiqueta-dato con un caracter, siempre con el mismo (etiqueta:dato, etiqueta,dato...). Con esto suele ser sificiente para que la utilidad de hoja de cálculo interprete que se trata de una estructura campo-contenido (por lo que incluso te puedes ahorrar el uso del procesador de texto), pero de nuevo si quieres asegurar el existo, lo que debes hacer es seleccionar todo el texto y aplicar la utilidad Writer/Word Tablas|Convetir|Texto en tablas, y seleccionar como separador el caracter empleado en la diferenciación etiqueta-dato (por similitud con el formato .csv te sugiero emplear la coma (,) como separador.

Repito, aunque es posible que otras opciones funciones igualmente, este es el procedimiento que te garantiza que todo salga bien. Con él crearás una tabla-registro donde los campos están dispuestos verticalmente, lo que facilita la lectura del registro pero no la creación de una base de datos en la que acumular los diferentes registros que vayamos creando. Este tipo de base de datos se organiza en horizontal, siendo cada columna un campo y cada fila in conjunto de datos o registro. Transformar una en otra es tema para un posterior desarrollo del procedimiento.

martes, 14 de abril de 2026

DATOS. Manipulación y limpieza

¿Qué datos?

Datos estructurados, semi-estructurados y no estructurados

Como resultado de la aplicación de las diferentes tecnologías que hemos visto en las entradas del subapartado anterior, disponemos ahora, on estamos en proceso de disponer, de un conjunto de datos que requieren, posiblemente, algún tipo de tratamiento, incluyendo su ajuste a forma y la eliminación de algún tipo de falla. A esto nos vamos a dedicar en este subapartado, pero antes deberemos aclarar una cuestión que incide muy mucho en este conjunto de tarea, hasta el punto de determinar cómo se pueden desarrollar. Me refiero al tipo de datos sobre el que tendremos que trabajar.

En función del tipo de datos y de cómo se presentan podemos distinguir entre datos estructurados y datos no estructurados. Los primeros son aquellos que, textuales, numéricos o lógicos (esto ahora es secundario), se presentan (o se pueden presentar) organizados (de ahí lo de "estructurados") en forma de tablas (para resumir) de doble entrada, en las que las columnas se deben entender como campos (y tipos de datos) y las filas como registros, lo que en nuestro campo (SEO) suele significar alumno. Los no estructurados más que datos los vamos a entender no como datos sino como segmentos textuales que contienen información (contenidos), y su tratamiento será diferente al que se da a los anteriores.

Pero aun podemos diferenciar un tercer bloque que vamos a denominar semi-estructurados por compartir con los no estructrados algunos rasgos relativos a los aspectos formales, pero mayormente aspiramos a convertirlos en estructurados mediante diversos procedimientos. Este tipo de datos se presentan en tablas insertas en documentos textuales, creados mediante procesadores de texto (.doc y otros) o en formato .pdf. Aun dentro de ellos podremos diferenciar aquellos en los que el continente formal tiene una función de estructuración de la presentación más que del contenido, lo que da lugar a posibles conflictos en su tratamiento posterior como estructurados o no estructurados. Tal es el caso de algunos soportes normativos del modelo de informe psicopedagógico; sin ir más lejos el actual de la Consejería de Educación de Asturias que, rompiendo con su formulaciones anteriores del documento, ha modifica el formato para presentarlo todo él como un conjunto de tablas, en lugar del anterior que combinaba tablas con secciones textuales.

Esos modelos mixtos combinan (o combinaban) datos semi-estructurados con vocación de desarrollo a estructurados y bloque de datos no estructurados (bloques textuales de información). Los primeros permitían procedimientos de automatización basados en estrategias ofimáticas (Combinar correspondencia) o en script (DocAp OOo Basic y/o script Python). Los segundos requieren otros planteamientos, como mínimo basados basados en textos maestros junto con el uso de marcadores, que requieren necesariamente de script, aunque son susceptibles a ser tratados también mediante procedimientos IA, especialmente dentro del campo del PLN (Procesamiento del Lenguaje Natural)

No tengo muy claro que esta deriva hacia la total estructuración del modelo de informe en formato tabla, junto con el uso ocasional de controles de formulario vaya a suponer una mejora en términos de ahorro de trabajo para los profesionales de los SEO, pero sí que va a significar mayor complejidad respecto al tratamiento de automatización parcial en su elaboración que se había logrado con el formato mixto. Pero esta, definitivamente, es ahora una cuestión irrelevante.

DATOS. Manipulación

Datos semi-estructurados PDF (I)

Tabla-Imagen

Con frecuencia una de las fuentes de datos estructurados son los documentos de texto, concretamente los documentos PDF. Realmente se trata de una fuente doblemente compleja: son realmente datos estructurados a nuestros ojos, pero precisan un tratamiento manual de tabulación (por ejemplo), pero están muy lejos de serlo para un ordenador, especialmente las "tablas" .pdf.

Antes de seguir y para que no queden dudas respecto al objetivo que se persigue aquí, diré que entiendo por manipulación o tratamiento de datos tabulados en documentos de texto el procedimiento cuyo objetivo último es la creación de estructuras asimilables a una tabla o base de datos que puede ser tratadamediante procedimientos de acceso y consulta a datos estructurados. Digo "objetivo último" porque realmente no siempre se puede garantizar su logro, al menos no de forma directa.

En para un tratamiento manual u ofimático "clásico" no existe diferencia entre un documento .pdf y un documento .docx (o un documento .odt), aunque es posible manipular directamente estos últimos mediante procedimientos relativamente simples basados en los mismos servicios ofimáticos y/o en la combinación procesador-hoja de cálculo. Esta posibilidad se complica si las tablas están en un documento .pdf, pero puede ser una complicación salvable, especialmente si los datos no están sujetos a confidencialidad; si sí lo están va a depender de la suerte que tengamos en el procedo de captura de los datos: si es posible copia-pega, no vamos a tener más trabajo que si se tratara de tablas .docx (o casi), pero si no se dejan capturar de este modo no nos va a quedar más remedio que copiarlos manualmente o casi manualmente.

El tratamiento automatizado se complica significativamente cuando la fuente es un documento .pdf, especialmente si sus tablas contienen información confidencial, que no es posible derivar a recursos especialidados IA; posiblemente las dificultades persisten incluso en caso de que sí sea posible emplear esos medios. De todas formas, en lo que a un SEO se refiere, ni por presupuesto ni por razones de confidencialidad es posible recurrir a esos medios. El resultado es, pues, que o bien renunciamos a automatizar el acceso a estas tablas o aplicamos procedimientos de automatización que sólo resuelven el problema de forma parcial y sin total garantia de estar libres de error; o lo que viene a seer lo mismo, deberemos estar dispuestos a realizar no sólo una siempre necesaria supervisión, sino algún tipo de intervención manual u ofimática complementaria.

Esto es debido a la complejidad que para los medios digitales presentan las tablas de los documentos .pdf, que presentan diferentes posibles comportamientos, no siempre claramente identificables ni siempre necesariamente el mismo en un único documento. Es por ello que las tecnologías de automatización pueden fracasar, al menos parcialmente, sin que sea garantía de éxito ni la complejidad ni la modernidad del recurso de automatización.

Sobre estas cuestiones trabajaremos en posteriores entradas, pero en la actual quiero presentar una opción que se toma casi en último extremo y que resuelve parcialmente la automatización del acceso al contenido de las tablas: la conversión de éstas en una imagen y el tratamiento de la imágen con recursos de OCR.

Aunque lo más ajustado a criterio de automatización sería generar la imagen de forma automática (converir automáticamente el .pdf en imagen), el coste de este procedimiento puede ser prohibitivo en términos de computación o de memoria, por lo que puede resultar mucho más sencillo crear manualmente la imagen mediante Imprimir pantalla, procedimiento simple y barato, especialmente si, siendo la tarea un trabajo personal, el número de documentos es pequeño. En otros casos podría optarse por el uso de la fotocopiadora en modo scanner y plantear un trabajo a nivel de equipo.

He de decir que, según IA-Gemnini existen opciones para automatizar la captura de pantalla, pero no vamos a tratarlas ahora, optando por el procedimiento manual al suponer un trabajo personal sobre unos pocos documentos. Lo que vamos a hacer es centrarnos en la automatización de la conversión del documento a texto, procedimiento que resolvemos mediante el siguiente script.


'''
Acceso a tablas convertidas en img manualmente mediante Imprimir pantalla
El script de Python usa pytesseract como OCR lo que implica tener instalado Tesseract
en el sistema.

Script desarrollado haciendo uso de IA-Gemini para mejoras de funcionamiento
implementadas a demanda específicada por el autor.

****************************************************************************************
--- FASES DEL PROCESO -------------------------
****************************************************************************************
'''

#0. Carga de bibliotecas ---------------------

import pytesseract
from PIL import Image
import os

# 1. Configuraciones y acceso a imagen -------------------------

# Configuración de Tesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# Configuración de las rutas de salida
nombre_carpeta = 'tablas'
nombre_archivo_txt = 'resultado_ocr.txt'

# Obtener la ruta del directorio donde se ejecuta el script
directorio_actual = os.path.dirname(os.path.abspath(__file__))
ruta_tablas = os.path.join(directorio_actual, nombre_carpeta)

# Crear la carpeta 'tablas' si no existe
if not os.path.exists(ruta_tablas):
    os.makedirs(ruta_tablas)

# Entrada nombre o ruta de img
nombre_imagen = input("Introduce el nombre del archivo de la imagen o su ruta completa (sin comillas): ").strip()

# 2. Procesamiento de OCR -----------------------------------

# Verificamos si el archivo existe antes de continuar
if not os.path.isfile(nombre_imagen):
    print(f"Error: El archivo '{nombre_imagen}' no se encuentra en la ruta especificada.")
else:
    try:
# Iniciamos el procesamiento OCR
        img = Image.open(nombre_imagen)
        texto = pytesseract.image_to_string(img, lang='spa')

# 4. Mostrar y guardar resultado -----------------------------

# Mostrar resultado en consola
        print("\nTexto extraído con éxito:")
        print("-" * 30)
        print(texto)
        print("-" * 30)

# Guardar resultado en archivo TXT usando el nombre de la imagen original para evitar sobreescritura
        nombre_base = os.path.splitext(os.path.basename(nombre_imagen))[0]
        ruta_final_txt = os.path.join(ruta_tablas, f"{nombre_base}.txt")
        
        with open(ruta_final_txt, 'w', encoding='utf-8') as f:
            f.write(texto)
        
        print(f"Archivo guardado en: {ruta_final_txt}")

    except Exception as e:
        print(f"Ocurrió un error al procesar la imagen: {e}")

Los comentarios que acompañan al código, que han sido específicamente incorporados y redactados exprofeso, hacen innecesario comentar el script, pero no lo que resulta de su aplicación.

La ventaja que resulta de aplicar este (que hemos llamado) último recurso (la conversión del visionado de la tabla-pdf en img) es que, si la calidad de la imagen es buena (y lo es al proceder de la captura de pantalla de un texto legible), el OCR funciona correctamente y transforma en texto accesible y sin errores ni omisiones, lo que antes podia no serlo tanto, especialmente para un procedimiento de automatización basado en código. Desgraciadamente tendremos ocasión de comprobar las dificultades que se presentan y la importante cantidad de errores que se producen; lo que no deja de ser un motivo para celebrar el exíto de rappidez y precisión de actual procedimiento.

Ahora bien, ya el visionado del texto en la consola (para eso lo hicimos así) nos va a mostrar que el resultado está aun lejos de ser directamente asimilable a una estructura de tabla de datos. El almacenamiento del texto como .txt permite guardar el texto tal y como lo visualizamos en pantalla, pero también proceder a su manipulación con estrategias propias del procesamiento de los documentos en ese formato, incluídas las estrategias manuales-ofimáticas, que son las que, de momento, planteo como solución más eficiente, rápida y segura.

Aunque sepa a poco, por ahora me conformo con esta "semi-automatización" y dejo para otro momento el desarrollo de otros procedimientos. En realidad estamos aun lejos de conseguir nuestro objetivo, pero mucho más cerca de obtener los datos que necesitamos por medios "tradicionales" aunque con un ahorro significativo de tiempo. Tan sólo tenemos que modificar el documento .txt resultante, preparándolo para ser procesado mediante la conocida combinación ofimática (vg.) Writer-Calc que ya sabemos aplicar.