从多个txt文件创建语料库

时间:2019-02-24 08:52:08

标签: r tidytext

我有多个txt文件,我希望数据整洁。为此,我先创建语料库(我不确定这是真的方法)。我编写了以下代码来获取语料库数据。

folder<-"C:\\Users\\user\\Desktop\\text analysis\\doc"
list.files(path=folder) 
filelist<- list.files(path=folder, pattern="*.txt")
paste(folder, "\\", filelist)
filelist<-paste(folder, "\\", filelist, sep="")
typeof(filelist)
a<- lapply(filelist,FUN=readLines)
corpus <- lapply(a ,FUN=paste, collapse=" ") 

当我检查class(corpus)时,它返回list。从那时起,我如何创建整洁的数据?

2 个答案:

答案 0 :(得分:2)

还要考虑其他问题,您需要阅读文本挖掘以及如何读取文件。现在,您的结果是一个列表对象。本身并不是一个坏对象,但出于您的目的,这是不正确的。在最后一行中使用lapply代替sapply,如下所示:

corpus <- sapply(a , FUN = paste, collapse = " ")

这将返回一个字符向量。接下来,您需要将其转换为data.frame。我将文件列表添加到data.frame中,以跟踪哪些文本属于哪个文档。

my_data <- data.frame(files = filelist, text = corpus, stringsAsFactors = FALSE)

,然后使用tidytext继续:

library(tidytext)
tidy_text <- unnest_tokens(my_data, words, text)

使用tm和tidytext包

如果您使用tm包,则可以这样读取所有内容:

library(tm)
folder <- getwd() # <-- here goes your folder

corpus <- VCorpus(DirSource(directory = folder,
                            pattern = "*.txt"))

您可以将其变成整洁的文本:

library(tidytext)
tidy_corpus <- tidy(corpus)
tidy_text <- unnest_tokens(tidy_corpus, words, text)

答案 1 :(得分:0)

如果您有文本文件,并且想要整洁的数据,那么我会直接从一个文件转到另一个文件,而不必打扰它们之间的tm包。

要查找工作目录中的所有文本文件,可以将list.files与参数一起使用:

all_txts <- list.files(pattern = ".txt$")

all_txts对象将是一个包含所有文件名的字符向量。

然后,您可以设置管道以读取所有文本文件,并使用带有purrr中map函数的tidytext将它们取消嵌套。如果需要,可以在mutate()中使用map()用文件名注释每一行。

library(tidyverse)
library(tidytext)

map_df(all_txts, ~ data_frame(txt = read_file(.x)) %>%
        mutate(filename = basename(.x)) %>%
        unnest_tokens(word, txt))