Come estrarre solo testo da file .doc e .docx? (unix)

Qualcuno sa di tutto ciò che può raccomandare per estrarre solo il testo in chiaro da un .doc o .docx?

Ho trovato questo modo migliore per estrarre il testo da un documento di Word senza utilizzare COM / automazione? – si chiedeva se ci fossero altri suggerimenti?

La velocità non è cruciale e potremmo persino utilizzare un sito Web con alcune API per caricare ed estrarre i file, ma non sono riuscito a trovarne uno.

Grazie

Se vuoi il puro testo in chiaro (il mio requisito), allora tutto ciò di cui hai bisogno è

unzip -p some.docx word/document.xml | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g' 

Che ho trovato a linea di comando fu

Decomprime il file docx e ottiene il documento vero e poi toglie tutti i tag xml. Ovviamente tutta la formattazione è persa.

LibreOffice

Un’opzione è libreoffice / openoffice in modalità headless (assicurarsi che tutte le altre istanze di libreoffice siano chiuse per prime):

 libreoffice --headless --convert-to "txt:Text (encoded):UTF8" mydocument.doc 

Per maggiori dettagli vedi ad es. Questo link: http://ask.libreoffice.org/en/question/2641/convert-to-command-line-parameter/

Per un elenco dei filtri libreoffice, vedi http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/config/fragments/filters

Poiché la syntax della riga di comando di openoffice è un po ‘troppo complicata, esiste un pratico wrapper che può semplificare il processo: unoconv .

POI di Apache

Un’altra opzione è Apache POI – una libreria Java ben supportata che a differenza di antiword può leggere, creare e convertire .doc , .docx , .xls , .xlsx , .ppt , .pptx .

Ecco il codice Java più semplice ansible per convertire un documento .doc o .docx in testo semplice:

 import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import org.apache.poi.POITextExtractor; import org.apache.poi.extractor.ExtractorFactory; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.xmlbeans.XmlException; public class WordToTextConverter { public static void main(String[] args) { try { convertWordToText(args[0], args[1]); } catch (ArrayIndexOutOfBoundsException aiobe) { System.out.println("Usage: java WordToTextConverter  "); } } public static void convertWordToText(String src, String desc) { try { FileInputStream fs = new FileInputStream(src); final POITextExtractor extractor = ExtractorFactory.createExtractor(fs); FileWriter fw = new FileWriter(desc); fw.write(extractor.getText()); fw.flush(); fs.close(); fw.close(); } catch (IOException | OpenXML4JException | XmlException e) { e.printStackTrace(); } } } Maven dependencies:   org.apache.poi poi 3.16    org.apache.poi poi-ooxml 3.16    org.apache.poi poi-scratchpad 3.16  

docx2txt è confezionato per Debian.

Il mio preferito è antiword:

http://www.winfield.demon.nl/

Ed ecco un progetto simile che sostiene il supporto per docx:

https://github.com/rainey/antiword-xp-rb/wiki

Prova Apache Tika . Supporta la maggior parte dei formati di documenti (tutti i formati Office, OpenOffice / LibreOffice, PDF, ecc.) Utilizzando librerie basate su Java (tra cui Apache POI ). È molto semplice da usare:

java -jar tika-app-1.4.jar --text ./my-document.doc

Trovo che sia meglio di catdoc o antiword. Può gestire .docx e convertire in testo o html. Ecco una funzione che ho aggiunto al mio .bashrc per visualizzare temporaneamente il file nel terminale. Cambialo come richiesto.

 # open word in less (ie worl document.doc) worl() { DOC=$(mktemp /tmp/output.XXXXXXXXXX) wvText $1 $DOC less $DOC rm $DOC } 

Per docx, che ne dici di http://libopc.codeplex.com/

Recentemente ho affrontato questo problema e ho trovato che gli strumenti della riga di comando di OpenOffice / LibreOffice non erano affidabili nella produzione (migliaia di documenti elaborati, dozzine contemporaneamente).

In definitiva, ho creato un involucro leggero, DocRipper che è molto più veloce e afferra tutto il testo da .doc, .docx e .pdf senza formattazione. DocRipper utilizza Antiword, grep e pdftotext per afferrare il testo e restituirlo.