我正在使用R包tm
,我想做一些文本挖掘。这是一个文件,被视为一袋文字。
我不明白有关如何加载文本文件和创建必要对象以开始使用诸如...等功能的文档。
stemDocument(x, language = map_IETF(Language(x)))
因此,假设这是我的文档“这是对R加载的测试”
如何加载数据以进行文本处理并创建对象x?
答案 0 :(得分:22)
就像@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包中,我将非常感激。我根本无法解决这个问题。
答案 1 :(得分:7)
你不能只使用同一个库中的readPlain
函数吗?或者您可以使用更常见的scan
函数。
mydoc.txt <-scan("./mydoc.txt", what = "character")
答案 2 :(得分:6)
我实际上发现这一点非常棘手,所以这里有一个更全面的解释。
首先,您需要为文本文档设置源。我发现最简单的方法(特别是如果你打算添加更多文档,就是创建一个可以读取所有文件的目录源。
source <- DirSource("yourdirectoryname/") #input path for documents
YourCorpus <- Corpus(source, readerControl=list(reader=readPlain)) #load in documents
然后,您可以将StemDocument功能应用于您的语料库。 HTH。
答案 3 :(得分:2)
我相信您想要做的是将单个文件读入语料库,然后将文本文件中的不同行视为不同的观察结果。
看看这是否能满足您的需求:
text <- read.delim("this is a test for R load.txt", sep = "/t")
text_corpus <- Corpus(VectorSource(text), readerControl = list(language = "en"))
这假设文件“这是对R load.txt的测试”只有一列有文本数据。
此处“text_corpus”是您要查找的对象。
希望这有帮助。
答案 4 :(得分:0)
这是我的文本文件解决方案,每个观察一行。关于tm的最新情节(2017年2月)提供了更多细节。
text <- read.delim(textFileName, header=F, sep = "\n",stringsAsFactors = F)
colnames(text) <- c("MyCol")
docs <- text$MyCol
a <- VCorpus(VectorSource(docs))
答案 5 :(得分:0)
以下内容假设您有一个文本文件目录,您要从中创建一袋单词。
唯一需要进行的更改是替换
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))