R文本文件和文本挖掘...如何加载数据

16

我正在使用R包tm进行文本挖掘,想处理一份文件并将其视为词袋。

我不理解如何加载文本文件以及创建必要的对象来开始使用功能,比如...

stemDocument(x, language = map_IETF(Language(x)))

假设这是我的文档:“this is a test for R load”

我如何加载文本处理的数据并创建对象x?

6个回答

23

像@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
我刚刚发现,stemDocument函数似乎根本不起作用,除非指定语言,因此我已经编辑了上面的代码以包括它。 - Ben

7

你不能直接使用同一个库中的readPlain函数吗?或者你可以使用更常见的scan函数。

mydoc.txt <-scan("./mydoc.txt", what = "character")

6

起初我觉得这很棘手,因此在这里提供更详细的解释。

首先,您需要设置文本文档的来源。我发现最简单的方法是创建一个目录源,以便读取所有文件(尤其是如果您计划添加更多文件)。

source <- DirSource("yourdirectoryname/") #input path for documents
YourCorpus <- Corpus(source, readerControl=list(reader=readPlain)) #load in documents

您可以将StemDocument函数应用于您的语料库。祝您好运。

2
我认为你想要做的是将单个文件读入语料库,然后将文本文件中不同行视为不同的观察结果。
看看这个是否符合你的需求:
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”是您要查找的对象。

希望这能帮到您。


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))

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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接