2012-06-20 3 views
7

È possibile leggere un file MSWord 2010 in R? Ho Windows 7 e un PC Dell.legge un file MSWord in R

Sto usando la linea:

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

per cercare di leggere un file MSWord contenente il testo seguente:

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

ottengo un messaggio di avviso che dice: messaggio

Attenzione : In readLines ("c:/users/mark w miller/simple R programmi/test_for_r.docx"): riga finale incompleta trovata su 'c:/users/mark wm Iller/semplici programmi di R/test_for_r.docx'

e my.data sembra essere senza senso:

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

so che con questo semplice esempio ho potuto facilmente convertire il file MSWord in un formato diverso. Tuttavia, i miei file di dati effettivi consistono in tabelle complesse che sono state digitate decenni fa e successivamente scansionate in documenti pdf. L'età del documento cartaceo originale e le eventuali imperfezioni della carta originale, la digitazione e/o il processo di scansione hanno portato alcune lettere e numeri a non essere chiari. Finora la conversione dei file PDF in MSWord sembra essere la più efficace per la corretta traduzione delle tabelle. La conversione dei file MSWord in Excel o rich text, ecc. Non ha avuto molto successo. Anche dopo la conversione in MSWord i file risultanti sono molto complessi e contengono numerosi errori. Ho pensato di poter leggere i file MSWord in R che potrebbe essere il modo più efficiente di modificarli e correggerli.

Sono a conoscenza di "pacchetto tm" che credo possa leggere i file MSWord in R, ma sono un po 'preoccupato di utilizzarlo perché sembra richiedere l'installazione di software di terze parti.

Grazie per eventuali suggerimenti.

+0

Per quanto ne so, leggere i file MS Word richiederà l'installazione di alcuni pacchetti da CRAN. Perché sei preoccupato dell'installazione di software di terze parti? –

+0

Il pacchetto tm fornisce la funzione readDOC(). Ciò richiede l'installazione di uno strumento esterno (non R) denominato antiword. Tuttavia, credo che il pacchetto/strumento legga solo i file Word fino alla versione 2003 e non gestirà i file .docx. readLines() non è la soluzione corretta neanche; richiede un semplice testo ASCII come input. – neilfws

+2

E se si dovesse salvare il documento word come 'html' e quindi utilizzare un pacchetto di scraping web (ad esempio' XML' o 'RCurl') per estrarre il testo? – mnel

risposta

6

Primo, readLines() non è la soluzione corretta, dal momento che un file di Word non è un testo (che è semplice, testo ASCII).

La funzione di Word legate nel pacchetto tm si chiama readDOC() ma entrambi esso e lo strumento necessario di terze parti (Antiword) sono per i file di Word più grandi (fino a Word 2003) e non funzionerà utilizzando i file .docx più recenti.

Il meglio che posso suggerire è che si tenta readPDF(), trovata anche nel pacchetto tm. Nota: richiede che lo strumento pdftotext sia installato sul sistema. Facile per Linux, nessuna idea di Windows. In alternativa, trova uno strumento Windows che converta PDF in file di testo ASCII semplici (non file Word) - devono essere aperti e visualizzati correttamente utilizzando Blocco note su Windows - quindi provare nuovamente readLines(). Tuttavia, dato che i file PDF sono vecchi e provengono da uno scanner, la conversione in testo potrebbe essere difficile.

Infine: mi rendo conto che non è stata presa la decisione originale in questa istanza, ma per nessun altro: Word e PDF non sono formati appropriati per l'archiviazione dei dati che si desidera analizzare.

+1

Penso che questa sia una risposta ragionevole, anche se penso che la frase finale sia abbastanza importante che l'avrei messa per prima. –

+2

Vorrei riformulare l'ultima frase in: "Word e PDF non sono formati appropriati per la memorizzazione di qualsiasi cosa. Microsoft è tristemente noto per aver rilasciato versioni di Office che non sono in grado di leggere formati di file meno recenti (Excel4.0, nessuno?) E PDF è strabiliante. ASCII ed epub (che è solo XML compresso) sono scelte molto migliori. –

+0

Perché queste persone dovrebbero farmi questo ??? – Bob

1

Non ho capito come leggere il file MSWord in R, ma ho ottenuto il contenuto in un formato che R può leggere.

  1. ho convertito un pdf a MSWord con Acrobat X Pro

  2. Le tavole originali avevano linee verticali solide che separano le colonne. Si è scoperto che queste linee verticali stavano interrompendo il formato dei dati quando ho convertito un file MSWord in un file di testo, ma sono stato in grado di eliminare le righe da un file MSWord prima di creare un file di testo.

  3. Convertire il file MSWord un file di testo dopo l'eliminazione di linee verticali nella Fase 2.

  4. file di testo che risulta ancora bisogno di parecchie modifiche, ma almeno i dati sono in gran parte presenti in un formato R in grado di leggere e io non dovrà reinserire manualmente tutti i dati nei pdf, risparmiando molte ore di lavoro.

+2

Un'alternativa ancora migliore: fai fare uno dei tuoi studenti universitari per te. Naturalmente, questo funziona solo se sei il professore e non lo studente :-) –

0

È possibile eseguire questa operazione con RDCOMClient molto facilmente. Nel dirlo, alcuni caratteri non verranno letti correttamente.

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

Quando provo questo codice, ricevo un errore "Eccezione verificata" e "Oggetto doc non trovato". 'setwd ('C:/Users/markm/semplici programmi R'); require (RDCOMClient); wordApp <- COMCreate ("Word.Application"); wordApp [["Visible"]] <- TRUE; wordFileName <- "C:/Users/markm/simple R programmi/My_test_MSWord_file.docx"; doc <- wordApp [["Documents"]] $ Open (wordFileName); print (doc $ range() $ text()); ' –

+0

Mark, sei sicuro di aver trovato il percorso del file giusto? Posso solo emulare il problema definendo un percorso file non valido. – Kaines