我正在使用R包tm
进行文本挖掘,想处理一份文件并将其视为词袋。
我不理解如何加载文本文件以及创建必要的对象来开始使用功能,比如...
stemDocument(x, language = map_IETF(Language(x)))
假设这是我的文档:“this is a test for R load”
我如何加载文本处理的数据并创建对象x?
我正在使用R包tm
进行文本挖掘,想处理一份文件并将其视为词袋。
我不理解如何加载文本文件以及创建必要的对象来开始使用功能,比如...
stemDocument(x, language = map_IETF(Language(x)))
假设这是我的文档:“this is a test for R load”
我如何加载文本处理的数据并创建对象x?
像@richiemorrisroe一样,我发现这个文档记录得很差。以下是我使用tm包将文本输入并创建文档项矩阵的方法:
library(tm) #load text mining library
setwd('F:/My Documents/My texts') #sets R's working directory to near where my files are
a <-Corpus(DirSource("/My Documents/My texts"), readerControl = list(language="lat")) #specifies the exact folder where my text file(s) is for analysis with tm.
summary(a) #check what went in
a <- tm_map(a, removeNumbers)
a <- tm_map(a, removePunctuation)
a <- tm_map(a , stripWhitespace)
a <- tm_map(a, tolower)
a <- tm_map(a, removeWords, stopwords("english")) # this stopword file is at C:\Users\[username]\Documents\R\win-library\2.13\tm\stopwords
a <- tm_map(a, stemDocument, language = "english")
adtm <-DocumentTermMatrix(a)
adtm <- removeSparseTerms(adtm, 0.75)
在这种情况下,您不需要指定确切的文件名。只要它是在第3行引用的目录中唯一的文件,tm函数就会使用它。我这样做是因为我在指定第3行的文件名时一直没有成功过。
如果有人能够建议如何将文本放入lda软件包中,我将不胜感激。我根本无法弄清楚。你不能直接使用同一个库中的readPlain
函数吗?或者你可以使用更常见的scan
函数。
mydoc.txt <-scan("./mydoc.txt", what = "character")
起初我觉得这很棘手,因此在这里提供更详细的解释。
首先,您需要设置文本文档的来源。我发现最简单的方法是创建一个目录源,以便读取所有文件(尤其是如果您计划添加更多文件)。
source <- DirSource("yourdirectoryname/") #input path for documents
YourCorpus <- Corpus(source, readerControl=list(reader=readPlain)) #load in documents
text <- read.delim("this is a test for R load.txt", sep = "/t")
text_corpus <- Corpus(VectorSource(text), readerControl = list(language = "en"))
假设文件“this is a test for R load.txt”只有一个包含文本数据的列。
这里,“text_corpus”是您要查找的对象。
希望这能帮到您。
text <- read.delim(textFileName, header=F, sep = "\n",stringsAsFactors = F)
colnames(text) <- c("MyCol")
docs <- text$MyCol
a <- VCorpus(VectorSource(docs))
以下假设您有一个文本文件目录,想要创建一个词袋。
唯一需要更改的是替换
path = "C:\\windows\\path\\to\\text\\files\\
为您自己的目录路径。
library(tidyverse)
library(tidytext)
# create a data frame listing all files to be analyzed
all_txts <- list.files(path = "C:\\windows\\path\\to\\text\\files\\", # path can be relative or absolute
pattern = ".txt$", # this pattern only selects files ending with .txt
full.names = TRUE) # gives the file path as well as name
# create a data frame with one word per line
my_corpus <- map_dfr(all_txts, ~ tibble(txt = read_file(.x)) %>% # read in each file in list
mutate(filename = basename(.x)) %>% # add the file name as a new column
unnest_tokens(word, txt)) # split each word out as a separate row
# count the total # of rows/words in your corpus
my_corpus %>%
summarize(number_rows = n())
# group and count by "filename" field and sort descending
my_corpus %>%
group_by(filename) %>%
summarize(number_rows = n()) %>%
arrange(desc(number_rows))
# remove stop words
my_corpus2 <- my_corpus %>%
anti_join(stop_words)
# repeat the count after stop words are removed
my_corpus2 %>%
group_by(filename) %>%
summarize(number_rows = n()) %>%
arrange(desc(number_rows))