Foros del Web » Programación para mayores de 30 ;) » Java »

Extraer texto DOCX

Estas en el tema de Extraer texto DOCX en el foro de Java en Foros del Web. Alguien tiene el código para extraer el texto de un archivo con extensión docx. Muchas gracias. He probado con la librería poi y no he ...
  #1 (permalink)  
Antiguo 04/03/2010, 02:28
 
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 352
Antigüedad: 16 años, 1 mes
Puntos: 5
Extraer texto DOCX

Alguien tiene el código para extraer el texto de un archivo con extensión docx.
Muchas gracias.

He probado con la librería poi y no he sido capaz.
  #2 (permalink)  
Antiguo 04/03/2010, 02:56
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 9 meses
Puntos: 10
Respuesta: Extraer texto DOCX

Wenas

Pon tu codigo a ver por donde falla.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #3 (permalink)  
Antiguo 12/03/2010, 07:15
 
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 352
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Extraer texto DOCX

import java.io.FileInputStream;
import java.io.IOException;

import org.apache.poi.POIOLE2TextExtractor;
import org.apache.poi.POITextExtractor;
import org.apache.poi.extractor.ExtractorFactory;
import org.apache.poi.hdgf.extractor.VisioTextExtractor;
import org.apache.poi.hslf.extractor.PowerPointExtractor;
import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;


public class PruebaDocx {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream fis = new FileInputStream("D:\\Depeche.docx");
POIFSFileSystem fileSystem = new POIFSFileSystem(fis);
// Firstly, get an extractor for the Workbook
POIOLE2TextExtractor oleTextExtractor =
ExtractorFactory.createExtractor(fileSystem);
// Then a List of extractors for any embedded Excel, Word, PowerPoint
// or Visio objects embedded into it.
POITextExtractor[] embeddedExtractors =
ExtractorFactory.getEmbededDocsTextExtractors(oleT extExtractor);
for (POITextExtractor textExtractor : embeddedExtractors) {
// If the embedded object was an Excel spreadsheet.
if (textExtractor instanceof ExcelExtractor) {
ExcelExtractor excelExtractor = (ExcelExtractor) textExtractor;
System.out.println(excelExtractor.getText());
}
// A Word Document
else if (textExtractor instanceof WordExtractor) {
WordExtractor wordExtractor = (WordExtractor) textExtractor;
String[] paragraphText = wordExtractor.getParagraphText();
for (String paragraph : paragraphText) {
System.out.println(paragraph);
}
// Display the document's header and footer text
System.out.println("Footer text: " + wordExtractor.getFooterText());
System.out.println("Header text: " + wordExtractor.getHeaderText());
}
// PowerPoint Presentation.
else if (textExtractor instanceof PowerPointExtractor) {
PowerPointExtractor powerPointExtractor =
(PowerPointExtractor) textExtractor;
System.out.println("Text: " + powerPointExtractor.getText());
System.out.println("Notes: " + powerPointExtractor.getNotes());
}
// Visio Drawing
else if (textExtractor instanceof VisioTextExtractor) {
VisioTextExtractor visioTextExtractor =
(VisioTextExtractor) textExtractor;
System.out.println("Text: " + visioTextExtractor.getText());
}
}
}

}


Me da el siguiente error al ejecutar.

Exception in thread "main" org.apache.poi.poifs.filesystem.OfficeXmlFileExcep tion: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
at org.apache.poi.poifs.storage.HeaderBlockReader.<in it>(HeaderBlockReader.java:98)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<i nit>(POIFSFileSystem.java:151)
at PruebaDocx.main(PruebaDocx.java:23)
  #4 (permalink)  
Antiguo 15/03/2010, 06:58
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 9 meses
Puntos: 10
Respuesta: Extraer texto DOCX

Puede que el problema sea el propio ficher.

Como ha sido generado ese docx?? Alguna beta??

Te sale el mismo error con cualquier otro docx??

Por lo que veo en el api, ese error da cuando tratas de abrir un fichero docx que realmente es un xml. Debe de hacerse la picha un lio el wordextractor con los tags de xml.

Intentalo con otro fichero.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #5 (permalink)  
Antiguo 17/03/2010, 10:33
 
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 352
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Extraer texto DOCX

No me va con ninguno..si alguien lo ha conseguido que me ayude...gracias.
  #6 (permalink)  
Antiguo 05/11/2011, 14:58
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 6 meses
Puntos: 69
Respuesta: Extraer texto DOCX

Yo se que la respuesta ya no te ayuda (por la fecha) pero para quien busque como yo la respuesta y haya llegado a tu tema (como lo hice yo) encontré la solución.

El error que te da es porque estas usando las clases que son para leer archivos .doc (del 2003 para atrás), y es lo que te dice alli que debes estar leyendo archivo XML porque no encontro la estructura que pensaba encontrar. Lo unico que hay que hacer para abrir un .docx (que tiene estructura xml) es usar las clases que la misma POI ofrece, fijarse bien que dice: eg XSSF instead of HSSF

Asi que solo hay que usar las clases de XSSF para un .docx y las HSSD para un .doc...

Les pongo el código básico para realizarlo:
Código PHP:
archivodoc = new File("c:\\muestra.docx");
        try {
            
FileInputStream fis = new FileInputStream(archivodoc);
            
InputStream entradaArch fis;
            
            
//el archivo esta en el stream entradaArch
            
            // para docs usar
            
WordExtractor we = new WordExtractor(entradaArch);

            
//para docx es un paso más
            
XWPFDocument ardocx = new XWPFDocument(entradaArch);
            
            
//instanciamos el obj para extraer
            
XWPFWordExtractor xwpf_we = new XWPFWordExtractor(ardocx);
            
            
//se lee el texto
            //leer el texto para un .doc
            
String texto we.getText();

            
//leer el texto para un .docx
            
String texto xwpf_we.getText();
            
            
// se imprime
            
System.out.println(texto);
y hay que hacer el catch() =) 
Ojala y les ayude, claro que tienen que bajar POI yo use la 3.7 y tiene que importar los jar al proyecto, y disculpen ya se que no se deben revivir temas viejos pero esto ayudará a muchos, buscando por la web hay poca info sobre esto, ojala a alguien le ayude.
  #7 (permalink)  
Antiguo 05/11/2011, 23:25
Avatar de cesarfh  
Fecha de Ingreso: noviembre-2011
Mensajes: 2
Antigüedad: 13 años
Puntos: 0
Respuesta: Extraer texto DOCX

jaja ZERO de casualidad no estas teniendo clases en el ITZ? lo digo por el archivo muestra.docx y estoy teniendo problemas con la libreria poi ya la agregue pero me da error al querer usar WordExtractor
  #8 (permalink)  
Antiguo 05/11/2011, 23:42
Avatar de cesarfh  
Fecha de Ingreso: noviembre-2011
Mensajes: 2
Antigüedad: 13 años
Puntos: 0
Respuesta: Extraer texto DOCX

Cita:
Iniciado por zero0097 Ver Mensaje
Yo se que la respuesta ya no te ayuda (por la fecha) pero para quien busque como yo la respuesta y haya llegado a tu tema (como lo hice yo) encontré la solución.

El error que te da es porque estas usando las clases que son para leer archivos .doc (del 2003 para atrás), y es lo que te dice alli que debes estar leyendo archivo XML porque no encontro la estructura que pensaba encontrar. Lo unico que hay que hacer para abrir un .docx (que tiene estructura xml) es usar las clases que la misma POI ofrece, fijarse bien que dice: eg XSSF instead of HSSF

Asi que solo hay que usar las clases de XSSF para un .docx y las HSSD para un .doc...

Les pongo el código básico para realizarlo:
Código PHP:
archivodoc = new File("c:\\muestra.docx");
        try {
            
FileInputStream fis = new FileInputStream(archivodoc);
            
InputStream entradaArch fis;
            
            
//el archivo esta en el stream entradaArch
            
            // para docs usar
            
WordExtractor we = new WordExtractor(entradaArch);

            
//para docx es un paso más
            
XWPFDocument ardocx = new XWPFDocument(entradaArch);
            
            
//instanciamos el obj para extraer
            
XWPFWordExtractor xwpf_we = new XWPFWordExtractor(ardocx);
            
            
//se lee el texto
            //leer el texto para un .doc
            
String texto we.getText();

            
//leer el texto para un .docx
            
String texto xwpf_we.getText();
            
            
// se imprime
            
System.out.println(texto);
y hay que hacer el catch() =) 
Ojala y les ayude, claro que tienen que bajar POI yo use la 3.7 y tiene que importar los jar al proyecto, y disculpen ya se que no se deben revivir temas viejos pero esto ayudará a muchos, buscando por la web hay poca info sobre esto, ojala a alguien le ayude.
jaja pues si eres mi tocayo y companiero entonces ya te salio tengo problemas al querer usar wordextractor
  #9 (permalink)  
Antiguo 06/11/2011, 01:05
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 6 meses
Puntos: 69
Respuesta: Extraer texto DOCX

jaja que onda cesar fernadiuz, ya ves el que es bueno es bueno, ya me salio el programa, cheka mi respuesta esta bien explicadito.

resulta que el wordextractor recibe un objeto de tipo InpuStream, y a ese input stream le pasas un fileInputStream, y a ese file input stream le pasas el file... el lunes te explico bien, a ver si no nos llaman la "atencion" aqui por usarlo de chat xD

Etiquetas: docx, extraer
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:46.