Conversión de archivos .docx a texto plano y preservación de saltos de línea para mantener referencias de números de línea al documento fuente: ¿cómo y sus implicaciones?

9

Estoy exportando contenido de MS Word a texto sin formato para usar con utilidades de texto y archivo. Tengo una restricción en la que la función de numeración de líneas se ha habilitado en el software de MS, y cualquier referencia a números de línea en el resultado final debe coincidir con esa numeración. Entonces ingrese "líneas de numeración":

ingrese la descripción de la imagen aquí ( Poe, EA )

Obviamente para Word , ese tipo de numeración no rompe las líneas en la nueva línea , rompe las "líneas" después del margen derecho (o algo así). Una secuencia de comandos como docx2txt, no tiene en cuenta esto de forma predeterminada, parece y rompe las líneas en la nueva línea. Entonces, si lo uso grep -ncon numeración, las líneas no coincidirán con la función de números de línea de origen, como se ilustra arriba. En la documentación no está exactamente claro cómo necesitaría editar el script de Perl para convertir los archivos de la manera que lo necesito en este caso:

our $config_newLine = "\n"; # Alternative is "\r\n".
our $config_lineWidth = 80; # Line width, used for short line justification.

Intenté sustituirlo \npor \r\npero eso no parece funcionar para mí. Así que recurrí a exportar los documentos directamente desde Word con la siguiente configuración (guardar como texto sin formato , en v.2013,64pc):

  • Unicode (UTF-8)
  • Insertar saltos de línea + líneas finales con (CR / LF)
  • Permitir sustitución de caracteres

Y ahora, de hecho, cuando uso los .txtarchivos, hay una coincidencia perfecta entre los números de línea en la función de numeración de origen y la grep -nsalida.


  • ¿Hay alguna configuración / proceso específico que debería conocer docx2txto una utilidad de línea de comando similar que me hubiera permitido convertir mis archivos .docx a texto sin formato y al mismo tiempo preservar los saltos de línea, sin recurrir a Word como lo hice?
  • ¿Cuáles son las mejores prácticas , si las hay, para exportar documentos de MS Word (que pueden contener caracteres acentuados) a texto sin formato para usar con utilidades de archivo / texto, con respecto a saltos de línea y formato; ¿y hay alguna implicación negativa con la configuración que elegí para exportar, es decir, insertar CR / LF?

Muestra

Según lo sugerido proporciono una muestra. En este archivo rar , incluí un archivo .docx con párrafos simples y su archivo .txt exportado usando Word con las opciones antes mencionadas. Este último se puede comparar con una ejecución predeterminada del docx2txtarchivo fuente.

Comunidad
fuente
¿Puedes darnos un archivo de ejemplo?
cuonglm
¿No puede guardarlo como un archivo txt de Word? Si le da un mal formato, sugeriría usar vim o emacs para solucionar el problema (porque estoy seguro de que está modelado).
Steven Walton el
1
@ Steven Walton Gracias, sí, funciona cuando exporto a txt desde Word. Pero no quiero tener que usar Word es mi punto. Desearía poder confiar solo en el script para hacer eso. Quiero un proceso por lote.
@Gnouc La muestra ha sido proporcionada. ¡Gracias!

Respuestas:

8

docx2txttrabaja en la información en el docxarchivo que es un conjunto comprimido de archivos XML.

Con respecto al ajuste de línea, los .docxdatos XML solo incluyen información sobre párrafos y pausas, no sobre pausas. Los descansos suaves son el resultado de representar el texto en una fuente, tamaño de fuente y ancho de página específicos. docx2txtnormalmente solo intenta ajustar el texto en 80 columnas (80 columnas es configurable), sin tener en cuenta la fuente y el tamaño de fuente. Si .docxcontiene información de fuente de un sistema de Windows que no está disponible en Unix / Linux, hacer la exportación a .txttravés de Open / LibreOffice también resultaría poco probable en el mismo diseño, aunque intenta hacer un buen trabajo¹.

Por lo tanto, docx2txto cualquier otra utilidad de línea de comandos, incluido el procesamiento Open / LibreOffice impulsado por la línea de comandos, no garantizará convertir el texto al mismo diseño que exportar desde Word².

Si desea (o se ve obligado por los requisitos del cliente) a representar exactamente como lo hace Word, en mi experiencia solo hay una forma: dejar que Word haga el renderizado. Cuando me enfrenté a un problema similar al tuyo³ y obtuve resultados incompatibles con otras herramientas, incluida OpenOffice, volví a instalar una VM de Windows en el servidor Linux host. En la máquina virtual del cliente, un programa observa los archivos entrantes que se convertirán en el host, lo que iniciaría y conduciría a Word para realizar la conversión y luego volvería a copiar el resultado⁴.

Las decisiones sobre el uso de CR / LF o LF solamente, o UTF-8 o alguna otra codificación .txtdependen en gran medida de cómo se usen los archivos resultantes. Si los archivos resultantes se usan en Windows, definitivamente usaría CR / LF, UTF-8 y una lista de materiales UTF-8 . Los programas modernos en Linux pueden deducir que un archivo es UTF-8, pero no irritarán la lista de materiales ni utilizarán esa información. Debe probar la compatibilidad de todas sus aplicaciones de destino si se conocen por adelantado.

¹ Este tipo de incompatibilidad es la razón principal por la que algunos de mis amigos no pueden cambiar a Linux desde Windows, aunque les gustaría. Tienen que usar MicroSoft Word, como Open / LibreOffice de vez en cuando manipula los textos que intercambian con los clientes.
² Puede instalar todas las fuentes utilizadas en los archivos de Word y podría tener suerte para algunos textos, algunas veces.
³ Representación de archivos PDF desde.doc/.docx
El programa usa la automatización de la GUI, como si alguien estuviera haciendo clic en sus menús, y no intenta manejar Word a través de una API. Estoy bastante seguro de que esto último también se puede hacer y tendría la ventaja de no romper las cosas si Word se actualizara

Anthon
fuente
¡Gracias, esto es realmente perspicaz! No estaba familiarizado con el formato, pero llamé al script vimy pude ver que se trata de xml, de hecho, debería profundizar en él. No había pensado en las fuentes, o tal vez incluso la separación silábica. También durante alguna operación recibí un mensaje de un editor de texto quejándose de BOM, así que leeré el enlace (ya que no tenía idea de qué era). ¡Me sorprendió su solución de VM! Estoy un poco familiarizado con la automatización de GUI: he visto que se usaba para construir una estación de trabajo después de que se replicaba una imagen base; no pensé en esto ...
Al final, eso significa que alguien que vaya a soho con tales tareas puede necesitar internalizar el costo de algunas licencias. Tal vez algún día hagan un nivel con API por uso. Romper líneas en los descansos suaves cambia completamente la dinámica de usar una herramienta como grep; Si las líneas son largas, esto disminuye la "precisión" en la salida. Supongo que las restricciones varían con la naturaleza del contenido y cómo se usa. Por otro lado, tales preguntas no serían si los documentos no se hubieran basado en la función de numeración de Word aquí. Construir un marco de documentos para abarcar material heredado es un asunto serio. ¡Salud!