Konvertieren von DOCX-Dateien in einfachen Text und Beibehalten von Zeilenumbrüchen, um Zeilennummernverweise auf das Quelldokument beizubehalten: Howto & Implikationen?

9

Ich exportiere MS Word- Inhalte in einfachen Text zur Verwendung mit Text- und Dateidienstprogrammen. Ich habe eine Einschränkung, bei der die Zeilennummerierungsfunktion in der MS-Software aktiviert wurde, und jeder Verweis auf Zeilennummern in der endgültigen Ausgabe muss mit dieser Nummerierung übereinstimmen. Geben Sie also "Nummerierungszeilen" ein:

Geben Sie hier die Bildbeschreibung ein ( Poe, EA )

Offensichtlich unterbricht diese Art der Nummerierung bei Word keine Zeilen bei Zeilenumbrüchen , sondern "Zeilen" nach dem rechten Rand (oder so). Ein Skript wie docx2txt, berücksichtigt dies anscheinend nicht standardmäßig und bricht Zeilen bei Zeilenumbruch. Wenn ich also grep -nmit Nummerierung verwende, stimmen die Zeilen nicht mit der Funktion für Quellzeilennummern überein, wie oben dargestellt. Aus der Dokumentation geht nicht genau hervor, wie ich das Perl-Skript bearbeiten müsste, um die Dateien so zu konvertieren, wie ich es in diesem Fall benötige:

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

Ich habe versucht , ersetzt \nfür , \r\naber das scheint nicht für mich arbeiten. Daher habe ich die Dokumente mit den folgenden Einstellungen direkt aus Word exportiert (als Nur- Text speichern , v.2013,64pc):

  • Unicode (UTF-8)
  • Zeilenumbrüche + Endzeilen mit (CR / LF) einfügen
  • Ersetzen von Zeichen zulassen

Und jetzt in der Tat , wenn ich verwende die .txtDateien gibt es eine perfekte Übereinstimmung zwischen Zeilennummern im Quell Nummerierung Features und der grep -nAusgang.


  • Gibt es eine bestimmte Konfiguration / einen bestimmten Prozess, über den ich Bescheid wissen sollte, docx2txtoder ein ähnliches Befehlszeilenprogramm, mit dem ich meine DOCX- Dateien unter Beibehaltung von Zeilenumbrüchen in einfachen Text konvertieren konnte , ohne wie ich auf Word zurückgreifen zu müssen ?
  • Welche bewährten Methoden werden gegebenenfalls zum Exportieren von MS Word- Dokumenten (die möglicherweise Zeichen mit Akzent enthalten) in Klartext zur Verwendung mit Datei- / Textdienstprogrammen in Bezug auf Zeilenumbrüche und Formatierungen verwendet? und gibt es irgendwelche negativen Auswirkungen auf die Einstellungen, die ich für den Export ausgewählt habe, dh das Einfügen von CR / LF?

Stichprobe

Wie vorgeschlagen stelle ich ein Beispiel zur Verfügung. In diesem seltenen Archiv habe ich eine DOCX- Datei mit einfachen Absätzen gebündelt und ihre TXT- Datei mit Word mit den oben genannten Optionen exportiert . Letzteres kann mit einem Standardlauf von docx2txtin der Quelldatei verglichen werden.

Gemeinschaft
quelle
Können Sie uns eine Beispieldatei geben?
Cuonglm
Können Sie es nicht als txt-Datei aus Word speichern? Wenn es zu einer schlechten Formatierung kommt, würde ich empfehlen, das Problem mit vim oder emacs zu beheben (da ich sicher bin, dass es gemustert ist).
Steven Walton
1
@Steven Walton Danke, ja, es funktioniert, wenn ich aus Word nach txt exportiere. Aber ich möchte nicht Word verwenden müssen, ist mein Punkt. Ich wünschte, ich könnte mich nur auf das Skript verlassen, um das zu tun. Ich möchte einen Prozess für die Charge.
@Gnouc Das Beispiel wurde bereitgestellt. Danke!

Antworten:

8

docx2txtarbeitet mit den Informationen in der docxDatei, bei der es sich um einen komprimierten Satz von XML-Dateien handelt.

In Bezug auf den Zeilenumbruch enthalten die .docxXML-Daten nur Informationen zu Absätzen und harten Unterbrechungen, nicht zu weichen Unterbrechungen. Soft-Breaks sind das Ergebnis des Renderns des Texts in einer bestimmten Schriftart, Schriftgröße und Seitenbreite. docx2txtNormalerweise wird nur versucht, Text in 80 Spalten einzupassen (80 Spalten sind konfigurierbar), ohne Rücksicht auf Schriftart und Schriftgröße. Wenn Ihre .docxSchriftart Informationen von einem Windows-System enthält, das unter Unix / Linux nicht verfügbar ist, führt der Export .txtüber Open / LibreOffice wahrscheinlich nicht zum gleichen Layout, obwohl versucht wird, gute Arbeit zu leisten¹.

Daher docx2txtkann nicht garantiert werden, dass ein anderes Befehlszeilenprogramm, einschließlich der befehlszeilengesteuerten Open / LibreOffice-Verarbeitung, den Text in dasselbe Layout konvertiert wie beim Exportieren aus Word².

Wenn Sie genau wie Word rendern möchten (oder aufgrund von Kundenanforderungen gezwungen sind), gibt es meiner Erfahrung nach nur einen Weg: Lassen Sie Word das Rendern durchführen. Bei einem ähnlichen Problem wie Ihrem³ und inkompatiblen Ergebnissen mit anderen Tools, einschließlich OpenOffice, habe ich wieder eine Windows-VM auf dem Linux-Hostserver installiert. Auf der Client-VM beobachtet ein Programm eingehende Dateien, die auf dem Host konvertiert werden sollen. Dadurch wird Word gestartet und veranlasst, die Konvertierung durchzuführen und dann das Ergebnis zurück zu kopieren.

Entscheidungen über die Verwendung von CR / LF oder nur LF oder UTF-8 oder einer anderen Codierung für das .txthängen weitgehend davon ab, wie die resultierenden Dateien verwendet werden. Wenn die resultierenden Dateien unter Windows verwendet werden, würde ich definitiv CR / LF, UTF-8 und eine UTF-8-Stückliste verwenden . Moderne Programme unter Linux können daraus schließen, dass es sich bei einer Datei um UTF-8 handelt, können jedoch die Stückliste nicht sperren und / oder diese Informationen verwenden. Sie sollten alle Ihre Zielanwendungen auf Kompatibilität testen, wenn diese im Voraus bekannt sind.

¹ Diese Art von Inkompatibilität ist der Hauptgrund, warum einige meiner Freunde von Windows nicht zu Linux wechseln können, obwohl sie dies möchten. Sie müssen von Zeit zu Zeit MicroSoft Word als Open / LibreOffice verwenden, um Texte zu entstellen, die sie mit Kunden austauschen.
² Sie können alle in den Word-Dateien verwendeten Schriftarten installieren und haben manchmal Glück mit einigen Texten.
³ Rendern von PDFs von.doc/.docx
Das Programm verwendet die GUI-Automatisierung - als würde jemand auf seine Menüs klicken - und versucht nicht, Word über eine API zu steuern. Ich bin mir ziemlich sicher, dass Letzteres auch möglich ist und den Vorteil hätte, Dinge nicht zu beschädigen, wenn Word aktualisiert würde

Anthon
quelle
Danke, das ist wirklich aufschlussreich! Ich war mit dem Format nicht vertraut, aber ich habe das Skript von aufgerufen vimund konnte sehen, dass es sich in der Tat nur um XML handelt - ich sollte es genauer untersuchen. Hatte nicht an Schriftarten oder vielleicht sogar Silbentrennung gedacht. Während einer Operation hatte ich auch eine Nachricht von einem Texteditor, der sich über Stücklisten beschwerte, damit ich den Link lesen kann (da ich keine Ahnung hatte, was das war). Ich war von Ihrer VM-Lösung überrascht! Ich bin mit der GUI-Automatisierung einigermaßen vertraut. Ich habe gesehen, dass damit eine Workstation erstellt wurde, nachdem ein Basis-Image repliziert wurde. habe nicht darüber
Am Ende bedeutet dies, dass jemand, der mit solchen Aufgaben soho geht, möglicherweise die Kosten einiger Lizenzen internalisieren muss. Vielleicht machen sie eines Tages eine Stufe mit der API pro Verwendung. Das Brechen von Linien bei weichen Unterbrechungen ändert die Dynamik der Verwendung eines Werkzeugs wie vollständig grep. Wenn die Zeilen lang sind, verringert dies die "Genauigkeit" der Ausgabe. Ich denke, Einschränkungen hängen von der Art des Inhalts und seiner Verwendung ab. Auf der anderen Seite wären solche Fragen nicht, wenn sich die Dokumente hier nicht auf die Word-Nummerierungsfunktion verlassen hätten. Das Erstellen eines Dokumentrahmens für Altmaterial ist eine ernste Angelegenheit. Prost!