从多个 txt 文件创建语料库
creating corpus from multiple txt files
我有多个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)
它时 returns list
。从那时起,我怎样才能创建整洁的数据?
再看看您的其他问题,您需要阅读有关文本挖掘以及如何读取文件的内容。您现在的结果是一个列表对象。本身不是一个坏对象,但对您的目的来说不正确。在最后一行使用 sapply
而不是 lapply
,如下所示:
corpus <- sapply(a , FUN = paste, collapse = " ")
这将 return 一个字符向量。接下来你需要把它变成一个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)
如果您有文本文件并且想要整洁的数据,我会直接从一个文件转到另一个文件,而不用理会中间的 tm 包。
要查找工作目录中的所有文本文件,您可以使用 list.files
和一个参数:
all_txts <- list.files(pattern = ".txt$")
all_txts
对象将成为包含所有文件名的字符向量。
然后,您可以设置一个管道来读取所有文本文件,并使用带有来自 purrr 的 map
函数的 tidytext 解除它们的嵌套。如果愿意,您可以在 map()
中使用 mutate()
来用文件名注释每一行。
library(tidyverse)
library(tidytext)
map_df(all_txts, ~ data_frame(txt = read_file(.x)) %>%
mutate(filename = basename(.x)) %>%
unnest_tokens(word, txt))
我有多个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)
它时 returns list
。从那时起,我怎样才能创建整洁的数据?
再看看您的其他问题,您需要阅读有关文本挖掘以及如何读取文件的内容。您现在的结果是一个列表对象。本身不是一个坏对象,但对您的目的来说不正确。在最后一行使用 sapply
而不是 lapply
,如下所示:
corpus <- sapply(a , FUN = paste, collapse = " ")
这将 return 一个字符向量。接下来你需要把它变成一个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)
如果您有文本文件并且想要整洁的数据,我会直接从一个文件转到另一个文件,而不用理会中间的 tm 包。
要查找工作目录中的所有文本文件,您可以使用 list.files
和一个参数:
all_txts <- list.files(pattern = ".txt$")
all_txts
对象将成为包含所有文件名的字符向量。
然后,您可以设置一个管道来读取所有文本文件,并使用带有来自 purrr 的 map
函数的 tidytext 解除它们的嵌套。如果愿意,您可以在 map()
中使用 mutate()
来用文件名注释每一行。
library(tidyverse)
library(tidytext)
map_df(all_txts, ~ data_frame(txt = read_file(.x)) %>%
mutate(filename = basename(.x)) %>%
unnest_tokens(word, txt))