unix - que - qué es un archivo doc y docx
¿Cómo extraer solo texto simple de los archivos.doc y.docx?(unix) (8)
LibreOffice
Una opción es libreoffice / openoffice en modo headless (asegúrese de que todas las demás instancias de libreoffice estén cerradas primero):
libreoffice --headless --convert-to "txt:Text (encoded):UTF8" mydocument.doc
Para más detalles, ver, por ejemplo, este enlace: http://ask.libreoffice.org/en/question/2641/convert-to-command-line-parameter/
Para obtener una lista de filtros de libreoffice, consulte http://cgit.freedesktop.org/libreoffice/core/tree/filter/source/config/fragments/filters
Dado que la sintaxis de la línea de comandos de openoffice es un poco complicada, existe un práctico contenedor que puede facilitar el proceso: unoconv .
POI Apache
Otra opción es Apache POI : una biblioteca de Java bien soportada que, a diferencia de antiword, puede leer, crear y convertir archivos .doc
, .docx
, .xls
, .xlsx
, .ppt
, .pptx
.
Aquí está el código Java más simple posible para convertir un documento .doc
o .docx
a texto sin formato:
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 <word_file> <text_file>");
}
}
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:
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.16</version>
</dependency>
NOTA: Necesitará agregar las bibliotecas de apache poi a classpath. En ubuntu / debian, las bibliotecas se pueden instalar con sudo apt-get install libapache-poi-java
; esto las instalará en /usr/share/java
. Para otros sistemas, deberá download la biblioteca y descomprimir el archivo en una carpeta que debe usar en lugar de /usr/share/java
. Si usa maven / gradle, simplemente incluya las dependencias org.apache.poi como se muestra en el fragmento de código.
El mismo código funcionará tanto para .doc
como para .docx
ya que la implementación requerida del convertidor se elegirá inspeccionando el flujo binario.
Compila la clase anterior (suponiendo que esté en el paquete predeterminado, y los archivos de pockets de apache estén en /usr/share/java
):
javac -cp /usr/share/java/*:. WordToTextConverter.java
Ejecuta la conversión:
java -cp /usr/share/java/*:. WordToTextConverter doc.docx doc.txt
¿Alguien sabe de algo que puedan recomendar para extraer solo el texto simple de un .doc o .docx?
¿He encontrado esta mejor manera de extraer texto de un documento de Word sin usar COM / automatización? - ¿Se preguntó si había alguna otra sugerencia?
La velocidad no es crucial, e incluso podríamos usar un sitio web que tenga alguna API para cargar y extraer los archivos, pero no he podido encontrar ninguno.
Gracias
Encuentro que wv es mejor que catdoc o antiword. Puede tratar con .docx y convertir a texto o html. Aquí hay una función que agregué a mi .bashrc para ver temporalmente el archivo en la terminal. Cámbielo según sea necesario.
# open word in less (ie worl document.doc)
worl() {
DOC=$(mktemp /tmp/output.XXXXXXXXXX)
wvText $1 $DOC
less $DOC
rm $DOC
}
Hace poco resolví este problema y descubrí que las herramientas de línea de comandos de OpenOffice / LibreOffice no son confiables en producción (miles de documentos procesados, docenas al mismo tiempo).
Finalmente, construí un contenedor DocRipper , DocRipper que es mucho más rápido y toma todo el texto de .doc, .docx y .pdf sin formatear. DocRipper utiliza Antiword, grep y pftftotext para tomar el texto y devolverlo.
Mi favorito es antiword:
Y aquí hay un proyecto similar que reclama soporte para docx:
Para docx, ¿qué tal http://libopc.codeplex.com/
Prueba Apache Tika . Admite la mayoría de los formatos de documentos (todos los formatos de Office, formatos de OpenOffice / LibreOffice, PDF, etc.) utilizando bibliotecas basadas en Java (entre otras, POI de Apache ). Es muy simple de usar:
java -jar tika-app-1.4.jar --text ./my-document.doc
Si desea el texto simple puro (mi requisito), entonces todo lo que necesita es
unzip -p some.docx word/document.xml | sed -e ''s/<[^>]/{1,/}>//g; s/[^[:print:]]/{1,/}//g''
Que encontré en la línea de comando fu
Descomprime el archivo docx y obtiene el documento real y luego elimina todas las etiquetas xml. Obviamente, todo el formato se pierde.
docx2txt
está empaquetado para Debian.