代码之家  ›  专栏  ›  技术社区  ›  dnagirl

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

  •  3
  • dnagirl  · 技术社区  · 12 年前

    我有一个混合文件类型的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 回复  |  直到 12 年前
        1
  •  5
  •   Community CDub    8 年前

    .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?

        2
  •  0
  •   dnagirl    12 年前

    我最终使用了 docx2txt 将.docx文件转换为文本。然后我用它们创建了一个语料库,如下所示:

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

    我想我可能会破解readDOC阅读器,让它根据需要使用docx2txt或反单词,但这很有效。

    推荐文章