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

读取多个*。r中的rtf文件

  •  2
  • feder80  · 技术社区  · 6 年前

    我有一个包含2000多个rtf文档的文件夹。我想将它们导入到r中(最好是导入到可以与 tidytext 包装)。此外,我还需要一个附加列,添加文件名,以便将每个rtf文档的内容链接到文件名(稍后,我还必须从文件名中提取信息,并将其保存到数据集的不同列中)。

    我找到了一个解决方案 Jens Leerssen 我试图适应我的要求:

    require(textreadr)
    
    read_plus <- function(flnm) {
    read_rtf(flnm) %>% 
        mutate(filename = flnm)
    }
    
    tbl_with_sources <-
        list.files(path= "./data", pattern = "*.rtf", 
               full.names = TRUE) %>% 
    map_df(~read_plus(.))
    

    但是,我收到以下错误消息:

    UseMethod中出错(“mutate\”): 没有适用于“character”类对象的“mutate\uu0”方法

    有人能告诉我为什么会发生这种错误,或者为我的问题提出另一种解决方案吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   feder80    6 年前

    通过一些变通方法,我终于解决了这个问题。

    1) 我转换了*。rft文件到*。txt文件,通过使用 textutil MacOSX终端中的命令:

    find . -name \*.rtf -print0 | xargs -0 textutil -convert txt
    

    通过这样做,我也摆脱了格式。

    2) 然后我用 read_plus Jens Lerrssen的职能。但是我现在使用 read.delim 而不是 read_rtf 包括两个选项( stringsAsFactors quote )要消除警告和/或错误,请执行以下操作:

    read_plus <- function(flnm) {
        read.delim(flnm, header = FALSE, stringsAsFactors = FALSE, quote = "") %>% 
                mutate(filename = flnm)
    }
    

    3) 最后,我读了所有的*。txt文件并重命名列n V1 在最后。

    df <- list.files(path = "./data", pattern = "*.txt", 
                   full.names = TRUE) %>% 
        map_df(~read_plus(.)) %>%
        rename(paragraph = V1)