En este apunte rápido voy a revisar cómo crear un código para contar las palabras contenidas bajo cada cabecera de un documento en LibreOffice Writer.
Este apunte es parte de una serie más grande de textos, buscando herramientas al escribir proyectos largos como: guiones, novelas, ensayos universitarios y ese tipo de cosas.
Eso nos lleva directamente a…
La idea:
Digamos que tenemos que escribir un proyecto con un total de 20.000 palabras. Escribir todas esas palabras es difícil, en especial cuando lo comparamos con escribir solamente 1.000 palabras.
Entonces decidimos dividir el texto en 20 secciones, para que se vuelva más fácil de completar. Esto es solamente un ejemplo, pueden ser más o menos partes. Lo que se mantiene cierto es que dividir el texto general en pequeñas secciones se vuelve más manejable de resolver.
El asunto es que creamos diferentes títulos, cabeceras o “headings” (H1, H2…) y podemos navegar entre esos headings. Pero en un principio no podemos saber cuantas palabras agregamos luego al empezar a escribir en cada uno.
Este macro que comparto a continuación, escrito en LibreOffice Basic, nos va a ayudar exactamente a eso.
La idea es tener un código que revise todo el texto y encuentre las cabeceras. Luego tiene que informarnos del nombre de la cabecera y su cantidad de palabras. Al final tiene que decirnos la cantidad total de palabras, aunque eso ya lo conocemos del contador dentro del documento.
El código:
Sub ContarPalabrasHeadings()
Dim doc As Object
Dim cursor As Object
Dim para As Object
Dim wordCount As Long
Dim totalWordCount As Long
Dim headingFound As Boolean
Dim result As String
doc = ThisComponent
text = doc.getText()
cursor = text.createEnumeration()
headingFound = False
result = ""
wordCount = 0
totalWordCount = 0
While cursor.hasMoreElements()
para = cursor.nextElement()
If Left(para.ParaStyleName, 7) = "Heading" Then
If headingFound Then
' Crea un string para reflejar el número de palabras entre cabeceras
result = result & headingText & ": " & wordCount & " palabras" & Chr(10)
End If
headingText = para.getString()
headingFound = True
wordCount = 0
Else
If headingFound Then
' Contar el número de palabras entre cabeceras
trimmedText = Trim(para.getString())
wordsArray = Split(trimmedText, " ")
wordCount = wordCount + UBound(wordsArray) + 1
totalWordCount = totalWordCount + UBound(wordsArray)
End If
End If
Wend
' Actualiza la variable result con el número de palabras
If headingFound Then
result = result & headingText & ": " & wordCount & " palabras" & Chr(10)
End If
If result = "" Then
MsgBox "No se encontraron cabeceras en el documento"
Else
MsgBox result & Chr(10) & "Total de palabras: " & totalWordCount
End If
End Sub
Posibles mejoras:
Se me ocurren en este momento dos mejoras que se le pueden agregar al programa:
1- Una forma de contar las palabras debajo de cada heading de forma más precisa. En la forma que se encuentra implementado, encontré que a veces el conteo por secciones puede tener algunas palabras de más o de menos con el conteo total. Nada exagerado de todas maneras, el programa sirve para conseguir una buena idea general de cuanto llevamos avanzado.
2- Se puede modificar el programa para que también nos informe que tipo de cabecera es cada una, H1, H2…
Pero el programa cumple con lo que promete sin necesidad de esas mejoras.
Conclusión:
Espero que este apunte te ayude a encontrar una forma de contar palabras bajo cada cabecera en un documento para Libreoffice Writer.
Si encontrás algún error en el material, por favor avisame para que pueda corregirlo.
La seguimos en el próximo apunte.
Leave a Reply