如何使用tm创建* .docx文件的语料库?

时间:2013-04-17 17:02:18

标签: r docx tm

我有一个MS Word文档的混合文件类型集合。有些文件是* .doc,有些是* .docx。我正在学习使用tm并且我(或多或少*)使用以下方法成功创建了由* .doc文件组成的语料库:

ex_eng <- Corpus(DirSource('~/R/expertise/corpus/english'), 
                 readerControl=list(reader=readDOC, 
                                    language='en_CA',
                                    load=TRUE));

此命令不处理* .docx文件。我认为我需要一个不同的读者。从this article开始,我知道我可以编写自己的(我很好地理解了我目前没有的.docx格式)。

readDOC阅读器使用antiword来解析* .doc文件。是否有类似的应用程序将解析* .docx文件?

或者更好的是,是否已经有一种使用tm创建* .docx文件语料库的标准方法?


*或多或少,因为虽然文件进入并且可读,但我对每个文档都会收到此警告:In readLines(y, encoding = x$Encoding) : incomplete final line found on 'path/to/a/file.doc'

2 个答案:

答案 0 :(得分:5)

.docx个文件是压缩的XML文件。如果你执行这个:

> uzfil <- unzip(file.choose())

然后在您的目录中选择一个.docx文件,您将获得:

> str(uzfil)
 chr [1:13] "./[Content_Types].xml" "./_rels/.rels" "./word/_rels/document.xml.rels" ...
> uzfil
 [1] "./[Content_Types].xml"          "./_rels/.rels"                  "./word/_rels/document.xml.rels"
 [4] "./word/document.xml"            "./word/theme/theme1.xml"        "./docProps/thumbnail.jpeg"     
 [7] "./word/settings.xml"            "./word/webSettings.xml"         "./word/styles.xml"             
[10] "./docProps/core.xml"            "./word/numbering.xml"           "./word/fontTable.xml"          
[13] "./docProps/app.xml"       

这也将以静默方式将所有这些文件解压缩到您的工作目录。 "./word/document.xml"文件包含您要查找的单词,因此您可以使用XML包中的一个XML工具来阅读它们。我猜你会做一些事情:

 library(XML)
 xtext <-  xmlTreeParse(unz(uzfil[4]), useInternalNodes = TRUE) )

实际上,您可能需要将其保存到临时目录并将该路径添加到文件名“./word/document.xml”。

您可能希望在此答案中使用@GaborGrothendieck提供的更多步骤:How to extract xml data from a CrossRef using R?

答案 1 :(得分:0)

我最终使用docx2txt将.docx文件转换为文本。然后我从他们那里创建了一个语料库:

ex_eng <- Corpus(DirSource('~/R/expertise/corpus/english'), 
                 readerControl=list(reader=readPlain, 
                                    language='en_CA',
                                    load=TRUE));

我想我可能会破解readDOC阅读器,以便它可以根据需要使用docx2txt或antiword,但这样可行。