2012-06-20 16 views
7

¿Es posible leer un archivo MSWord 2010 en R? Tengo Windows 7 y una PC Dell.lea un archivo MSWord en R

estoy usando la línea:

my.data <- readLines('c:/users/mark w miller/simple R programs/test_for_r.docx') 

a tratar de leer un archivo de MS Word que contiene el siguiente texto:

A 20 1000 AA 
B 30 1001 BB 
C 10 1500 CC 

me sale un mensaje de aviso que dice: Mensaje de

Advertencia : En readLines ("c:/users/mark w milller/simple R programs/test_for_r.docx"): línea final incompleta que se encuentra en 'c:/users/mark wm Iller programas de I/simples/test_for_r.docx'

y my.data parece ser un galimatías:

# [1] "PK\003\004\024" "¤l"    "ÈFÃË‹Átí" 

Sé que con este ejemplo simple podría fácilmente convertir el archivo MS Word a un formato diferente. Sin embargo, mis archivos de datos actuales consisten en tablas complejas que se escribieron hace décadas y luego se escanearon en documentos PDF más adelante. La antigüedad del documento en papel original y tal vez las imperfecciones en el documento original, el proceso de mecanografía y/o escaneo han resultado en que algunas letras y números no sean muy claros. Hasta ahora, convertir los archivos pdf a MSWord parece ser el más exitoso para traducir correctamente las tablas. Convertir los archivos de MSWord a Excel o texto enriquecido, etc., no ha sido muy exitoso. Incluso después de la conversión a MSWord, los archivos resultantes son muy complejos y contienen numerosos errores. Pensé que si podía leer los archivos de MSWord en R podría ser la manera más eficiente de editarlos y corregirlos.

Conozco el 'paquete tm' que supongo que puede leer archivos MSWord en R, pero estoy un poco preocupado por su uso porque parece requerir la instalación de un software de terceros.

Gracias por cualquier sugerencia.

+0

Por lo que sé, la lectura de archivos de MS Word va a requerir la instalación de algún paquete de CRAN. ¿Por qué te preocupa instalar software de terceros? –

+0

El paquete tm proporciona la función readDOC(). Esto requiere la instalación de una herramienta externa (no R) llamada antiword. Sin embargo, creo que el paquete/herramienta solo lee archivos de Word hasta la versión 2003 y no maneja archivos .docx. readLines() tampoco es la solución correcta; requiere texto ASCII simple como entrada. – neilfws

+2

¿Qué sucede si guarda la palabra documento como 'html' y luego usa un paquete de raspado web (por ejemplo' XML' o 'RCurl') para extraer el texto? – mnel

Respuesta

6

Primero, readLines() no es la solución correcta, ya que un archivo de Word no es un archivo de texto (es decir, texto simple, ASCII).

La función relacionada con la palabra en la tm paquete se llama readDOC() pero tanto ella como la herramienta necesaria de terceros (Antiword) son de mayor edad archivos de Word (hasta Word 2003) y no funcionará usando archivos .docx más nuevos.

Lo mejor que puedo sugerir es que intenta readPDF(), también encontrado en el tm paquete. Nota: requiere que la herramienta pdftotext esté instalada en su sistema. Fácil para Linux, sin idea de Windows. Alternativamente, encuentre una herramienta de Windows que convierta archivos PDF en archivos de texto ASCII (no en archivos de Word) - deben abrirse y visualizarse correctamente usando el Bloc de notas en Windows - luego intente readLines() nuevamente. Sin embargo, dado que sus archivos PDF son viejos y provienen de un escáner, la conversión a texto puede ser difícil.

Finalmente: me doy cuenta de que no tomó la decisión original en esta instancia, pero para cualquier otra persona: Word y PDF no son formatos adecuados para almacenar datos que desea analizar.

+1

Creo que esta es una respuesta razonable, aunque creo que la oración final es lo suficientemente importante como para haberlo expresado primero. –

+2

Reformularía la última frase en: "Word y PDF no son formatos adecuados para almacenar nada." Microsoft es infame por lanzar versiones de Office que no pueden leer formatos de archivo más antiguos (Excel4.0, ¿alguien?), Y el PDF es extremadamente resistente. ASCII y epub (que está solo comprimido en XML) son opciones mucho mejores. –

+0

¿Por qué esa gente me haría esto? – Bob

1

No he descubierto cómo leer el archivo MSWord en R, pero he obtenido los contenidos en un formato que R puede leer.

  1. que convierte un pdf a MSWord con Acrobat X Pro

  2. Las tablas originales tenían líneas verticales que separan las columnas sólidas. Resulta que estas líneas verticales estaban alterando el formato de los datos cuando convertí un archivo MSWord a un archivo de texto, pero pude eliminar las líneas de un archivo MSWord antes de crear un archivo de texto.

  3. Convertir el archivo de MS Word a un archivo de texto después de eliminar las líneas verticales en el Paso 2.

  4. resultantes archivos de texto todavía requieren de edición extensa, pero al menos son en gran parte presente en un formato R los datos pueden leer y yo no tendrá que volver a ingresar todos los datos en el pdfs a mano, ahorrando muchas horas de trabajo.

+2

Una alternativa aún mejor: haz que uno de tus estudiantes de posgrado lo haga por ti. Por supuesto, esto solo funciona si eres el profesor y no el alumno :-) –

0

Puede hacerlo con RDCOMClient muy fácilmente. Al decirlo, algunos caracteres no se leerán correctamente.

require(RDCOMClient) 
# Create the connection 
wordApp <- COMCreate("Word.Application") 
# Let's set visible to true so you can see it run 
wordApp[["Visible"]] <- TRUE 

# Define the file we want to open 
wordFileName <- "c:/path/to/word/doc.docx" 
# Open the file 
doc <- wordApp[["Documents"]]$Open(wordFileName) 
# Print the text 
print(doc$range()$text()) 
+0

Cuando pruebo este código, recibo un error "Exception occurred" y "object doc not found". 'setwd ('C:/Users/markm/simple R programs'); require (RDCOMClient); wordApp <- COMCreate ("Word.Application"); wordApp [["Visible"]] <- TRUE; wordFileName <- "C:/Users/markm/simple R programs/My_test_MSWord_file.docx"; doc <- wordApp [["Documents"]] $ Open (wordFileName); print (doc $ range() $ text()); ' –

+0

Mark, ¿está seguro de que tiene la ubicación del archivo correcta? Solo puedo emular el problema definiendo una ubicación de archivo no válida. – Kaines