我有一个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'
答案 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,但这样可行。