10

是否可以将 MSWord 2010 文件读入 R?我有 Windows 7 和戴尔 PC。

我正在使用这条线:

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

尝试读取包含以下文本的 MSWord 文件:

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

我收到一条警告消息,上面写着:

警告消息:在 readLines("c:/users/mark w miller/simple R programs/test_for_r.docx") 中:在 'c:/users/mark w miller/simple R programs/test_for_r.docx' 上找到不完整的最后一行

并且my.data似乎是胡言乱语:

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

我知道通过这个简单的示例,我可以轻松地将 MSWord 文件转换为不同的格式。但是,我的实际数据文件由几十年前输入的复杂表格组成,后来扫描成 pdf 文档。原始纸质文件的年代以及原始纸质、打字和/或扫描过程中可能存在的缺陷导致某些字母和数字不是很清楚。到目前为止,将 pdf 文件转换为 MSWord 似乎是正确翻译表格最成功的方法。将 MSWord 文件转换为 Excel 或富文本等,并不是很成功。即使在转换为 MSWord 之后,生成的文件也非常复杂并且包含许多错误。我想如果我可以将 MSWord 文件读入 R,这可能是编辑和更正它们的最有效方法。

我知道“package tm”我猜它可以将 MSWord 文件读入 R,但我有点担心使用它,因为它似乎需要安装第三方软件。

感谢您的任何建议。

4

4 回答 4

7

首先,readLines()不是正确的解决方案,因为 Word 文件不是文本(即纯 ASCII 文本)文件。

tm包中与 Word 相关的函数称为readDOC(),但它和所需的第三方工具 (Antiword) 都适用于较旧的 Word 文件(直到 Word 2003),并且无法使用较新的 .docx 文件。

我可以建议的最好的方法是您尝试readPDF(),也可以在tm包中找到。注意:它要求您的系统上安装了工具pdftotext 。对 Linux 来说很容易,对 Windows 不了解。或者,找到一个将 PDF 转换为纯 ASCII 文本文件(不是Word 文件)的 Windows 工具——它们应该在 Windows 上使用记事本正确打开和显示——然后再次尝试readLines()。但是,鉴于您的 PDF 文件较旧且来自扫描仪,转换为文本可能会很困难。

最后:我意识到您在这种情况下没有做出最初的决定,但对于其他任何人 - Word 和 PDF 不是存储您要解析的数据的合适格式。

于 2012-06-20T01:00:50.927 回答
4

如果它对其他人有帮助,https://cran.r-project.org/web/packages/readtext/vignettes/readtext_vignette.html,似乎有一个专门用于读取文本数据的新包,包括 Word 文件(也是新的.docx格式)。

于 2020-02-24T16:45:56.290 回答
1

我还没有弄清楚如何将 MSWord 文件读入 R,但我已经将内容转换为 R 可以读取的格式。

  1. 我使用 Acrobat X Pro 将 pdf 转换为 MSWord

  2. 原始表格用实心垂直线分隔列。事实证明,当我将 MSWord 文件转换为文本文件时,这些垂直线破坏了数据的格式,但我能够在创建文本文件之前从 MSWord 文件中删除这些行。

  3. 在步骤 2 中删除垂直线后,将 MSWord 文件转换为文本文件。

  4. 生成的文本文件仍然需要大量编辑,但至少数据大部分以 R 可以读取的格式存在,我不必手动重新输入 pdf 中的所有数据,从而节省了很多小时的工作。

于 2012-06-20T09:05:30.033 回答
1

您可以使用 RDCOMClient 轻松完成此操作。这么说,有些字符将无法正确读入。

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()) 
于 2016-11-24T22:23:33.677 回答