Conversione di file .docx in testo semplice e conservazione delle interruzioni di riga per mantenere i riferimenti al numero di riga nel documento di origine: howto e implicazioni?


9

Sto esportando il contenuto di MS Word in testo normale da utilizzare con utilità di testo e file. Ho un vincolo in cui la funzione di numerazione delle righe è stata abilitata nel software MS e qualsiasi riferimento ai numeri di riga nell'output finale deve corrispondere a tale numerazione. Quindi inserisci "linee di numerazione":

inserisci qui la descrizione dell'immagine ( Poe, EA )

Ovviamente per Word , quel tipo di numerazione non interrompe le righe alla riga successiva , interrompe le "righe" dopo il margine giusto (o qualcosa del genere). Uno script simile docx2txt, per impostazione predefinita, non tiene conto di ciò e interrompe le righe a newline. Quindi, se uso grep -ncon la numerazione, le righe non corrisponderanno alla funzione dei numeri di riga di origine, come illustrato sopra. Dalla documentazione non è esattamente chiaro come avrei bisogno di modificare lo script Perl per convertire i file come devo fare in questo caso:

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

Ho provato a sostituire \nper \r\n, ma che non sembra funzionare per me. Quindi ho fatto ricorso all'esportazione dei documenti direttamente da Word con le seguenti impostazioni (salva come testo normale , su v.2013,64pc):

  • Unicode (UTF-8)
  • Inserisci interruzioni di riga + fine con (CR / LF)
  • Consenti la sostituzione del personaggio

E ora in effetti quando uso i .txtfile c'è una corrispondenza perfetta tra i numeri di riga nella funzione di numerazione sorgente e l' grep -noutput.


  • Esiste qualche configurazione / processo specifico che dovrei conoscere docx2txto un'utilità della riga di comando simile che mi avrebbe permesso di convertire i miei file .docx in testo normale preservando le interruzioni di riga, senza ricorrere a Word come ho fatto io?
  • Quali sono le migliori pratiche , se presenti, per esportare documenti MS Word (che possono contenere caratteri accentati) in testo normale da utilizzare con utilità di file / testo, rispetto alle interruzioni di riga e alla formattazione; e ci sono implicazioni negative con le impostazioni che ho scelto per l'esportazione, ad esempio l'inserimento di CR / LF?

Campione

Come suggerito, fornisco un campione. In questo raro archivio , ho raggruppato un file .docx con semplici paragrafi e il suo file .txt esportato usando Word con le opzioni di cui sopra. Quest'ultimo può essere confrontato con un'esecuzione predefinita del docx2txtfile di origine.


Puoi darci un file di esempio?
cuonglm

Non puoi salvarlo come file txt da Word? Se ti dà una formattazione errata, ti suggerirei di utilizzare vim o emacs per risolvere il problema (perché sono sicuro che è strutturato).
Steven Walton,

1
@Steven Walton Grazie, sì, funziona quando esporto in txt da Word. Ma non voglio usare Word è il mio punto. Vorrei poter fare affidamento solo sulla sceneggiatura per farlo. Voglio un processo per batch.

@Gnouc L'esempio è stato fornito. Grazie!

Risposte:


8

docx2txtfunziona sulle informazioni nel docxfile che è un insieme compresso di file XML.

Per quanto riguarda il ritorno a capo, i .docxdati XML includono solo informazioni su paragrafi e interruzioni di attività, non su interruzioni di attività. Le interruzioni automatiche sono il risultato del rendering del testo in un carattere specifico, dimensione del carattere e larghezza della pagina. docx2txtnormalmente cerca solo di adattare il testo in 80 colonne (80 colonne sono configurabili), senza alcun riguardo per il carattere e la dimensione del carattere. Se il tuo .docxcontiene informazioni sui caratteri da un sistema Windows che non è disponibile su Unix / Linux, .txtè improbabile che anche l'esportazione in via Open / LibreOffice porti allo stesso layout, sebbene cerchi di fare un buon lavoro¹.

Quindi docx2txto qualsiasi altra utility a riga di comando, inclusa l'elaborazione Open / LibreOffice basata sulla riga di comando, non garantirà la conversione del testo nello stesso layout dell'esportazione da Word2.

Se vuoi (o sei obbligato dai requisiti del cliente) a eseguire il rendering esattamente come fa Word, nella mia esperienza c'è un solo modo: lascia che Word esegua il rendering. Di fronte a un problema simile al tuo³ e con risultati incompatibili con altri strumenti, incluso OpenOffice, sono tornato a installare una VM Windows sul server Linux host. Sulla VM client un programma osserva che i file in arrivo devono essere convertiti sull'host, il che avvia e spinge Word a fare la conversione, quindi copia il risultato⁴.

Le decisioni sull'utilizzo solo di CR / LF o LF, o UTF-8 o qualche altra codifica per la .txtmaggior parte dipendono da come vengono utilizzati i file risultanti. Se i file risultanti vengono utilizzati su Windows, andrei sicuramente con CR / LF, UTF-8 e una distinta base UTF-8 . I moderni programmi su Linux sono in grado di dedurre che un file è UTF-8, ma non entreranno nella distinta base e / o utilizzeranno tali informazioni. È necessario verificare la compatibilità di tutte le applicazioni target se sono note in anticipo.

¹ Questo tipo di incompatibilità è il motivo principale per cui alcuni miei amici non possono passare a Linux da Windows, anche se vorrebbero. Devono usare MicroSoft Word, come Open / LibreOffice di tanto in tanto i testi mangles che scambiano con i clienti.
² È possibile installare tutti i caratteri utilizzati nei file di Word e potrebbe essere fortunato per alcuni testi, a volte.
³ Rendering di PDF da.doc/.docx
Il programma utilizza l'automazione della GUI, come se qualcuno stesse facendo clic sui suoi menu e non tenta di guidare Word tramite un'API. Sono abbastanza sicuro che anche quest'ultimo possa essere fatto e avrebbe il vantaggio di non rompere le cose se Word venisse aggiornato


Grazie, questo è davvero penetrante! Non avevo familiarità con il formato, ma ho chiamato lo script vime ho potuto vedere che si tratta davvero di xml: dovrei approfondire ulteriormente. Non avevo pensato ai caratteri, o forse nemmeno alla sillabazione. Inoltre durante alcune operazioni ho ricevuto un messaggio da un editor di testo che si lamentava della distinta base, quindi leggerò il link (poiché non avevo idea di cosa fosse). Sono stato sorpreso dalla tua soluzione VM! Ho una certa familiarità con l'automazione della GUI: l'ho visto usato per costruire una workstation dopo la replica di un'immagine di base; non ci ho pensato ...

Alla fine, ciò significa che qualcuno che si impegna in tali compiti potrebbe aver bisogno di internalizzare il costo di alcune licenze. Forse un giorno fanno un livello con API per uso. Rompere le linee sulle interruzioni morbide cambia completamente la dinamica dell'uso di uno strumento simile grep; se le linee sono lunghe, ciò riduce la "precisione" sull'output. Immagino che i vincoli variano in base alla natura del contenuto e al modo in cui viene utilizzato. D'altra parte, tali domande non sarebbero se i documenti non avessero fatto affidamento sulla funzione di numerazione di Word qui. Costruire un framework di documenti per includere materiale legacy è una faccenda seria. Saluti!
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.