标签: tm

使用tm()从R中的语料库中删除非英语文本

我在R中使用tm()wordcloud()进行一些基本的数据挖掘,但由于我的数据集中有非英文字符(即使我试图根据背景变量过滤掉其他语言),我遇到了困难.

假设我的TXT文件中的一些行(在TextWrangler中保存为UTF-8)如下所示:

Special
satisfação
Happy
Sad
Potential für
Run Code Online (Sandbox Code Playgroud)

然后我将我的txt文件读入R:

words <- Corpus(DirSource("~/temp", encoding = "UTF-8"),readerControl = list(language = "lat"))
Run Code Online (Sandbox Code Playgroud)

这会产生警告消息:

Warning message:
In readLines(y, encoding = x$Encoding) :
  incomplete final line found on '/temp/file.txt'
Run Code Online (Sandbox Code Playgroud)

但由于这是一个警告,而不是错误,我继续向前推进.

words <- tm_map(words, stripWhitespace)
words <- tm_map(words, tolower)
Run Code Online (Sandbox Code Playgroud)

然后产生错误:

Error in FUN(X[[1L]], ...) : invalid input 'satisfa??o' in 'utf8towcs'
Run Code Online (Sandbox Code Playgroud)

我愿意找到在TextWrangler或R中过滤掉非英文字符的方法; 无论什么是最权宜之计.谢谢你的帮助!

r tm

10
推荐指数
1
解决办法
2万
查看次数

tm:读入数据框,保留文本ID,构造DTM并加入其他数据集

我正在使用包tm.

假设我有一个2列,500行的数据框.第一列是随机生成的ID,其中包含字符和数字:"txF87uyK"第二列是实际文本:"今天天气好.约翰去慢跑.等等,等等......"

现在我想从这个数据框创建一个文档术语矩阵.

我的问题是我想保留ID信息,以便在我得到文档 - 术语矩阵后,我可以将此矩阵与另一个矩阵连接起来,每个矩阵的每一行都是每个文档的其他信息(日期,主题,情感),每一行都是由文件ID识别.

我怎样才能做到这一点?

问题1:如何将此数据框转换为语料库并获取ID信息?

问题2:获取dtm后,如何将其与ID的其他数据集合加入?

r text-mining tm

10
推荐指数
2
解决办法
1万
查看次数

如何在R tm包中显示语料库文本?

我是R和tm包中的新手,所以请原谅我的愚蠢问题;-)如何在R tm包中显示纯文本语料库的文本?

我在语料库中加载了一个包含323个纯文本文件的语料库:

 src <- DirSource("Korpora/technologie")
corpus <- Corpus(src)
Run Code Online (Sandbox Code Playgroud)

但是当我用语料库调用语料库时:

corpus[[1]]
Run Code Online (Sandbox Code Playgroud)

我总是得到这样的输出而不是语料库本身:

<<PlainTextDocument>>
Metadata:  7
Content:  chars: 144
Content:  chars: 141
Content:  chars: 224
Content:  chars: 75
Content:  chars: 105
Run Code Online (Sandbox Code Playgroud)

如何显示语料库的文本?

谢谢!

更新可 重复的样本:我已经尝试了内置的示例文本:

> data("crude")
> crude
<<VCorpus>>
Metadata:  corpus specific: 0, document level (indexed): 0
Content:  documents: 20
> crude[1]
<<VCorpus>>
Metadata:  corpus specific: 0, document level (indexed): 0
Content:  documents: 1
> crude[[1]]
<<PlainTextDocument>>
Metadata:  15
Content:  chars: 527
Run Code Online (Sandbox Code Playgroud)

如何打印文档文本?

更新2:会话信息:

> sessionInfo()
R version 3.1.3 (2015-03-09) …
Run Code Online (Sandbox Code Playgroud)

r corpus tm

10
推荐指数
3
解决办法
3万
查看次数

如何使用新(测试)数据重新创建相同的DocumentTermMatrix

假设我有基于文本的训练数据和测试数据.更具体地说,我有两个数据集 - 培训和测试 - 并且它们都有一个包含文本的列,并且对于手头的工作很感兴趣.

我在R中使用tm包来处理训练数据集中的文本列.在删除空格,标点符号和停用词之后,我阻止了语料库并最终创建了1克的文档术语矩阵,其中包含每个文档中单词的频率/计数.然后,我采取了预先确定的截止值,比如50,并且仅保留那些计数大于50的术语.

在此之后,我使用DTM和因变量(存在于训练数据中)训练一个GLMNET模型.到目前为止,一切都运行顺畅.

但是,当我想在测试数据上获得/预测模型或未来可能出现的任何新数据时,我该如何处理?

具体来说,我想要找出的是如何在新数据上创建精确的DTM?

如果新数据集没有任何与原始训练数据相似的单词,则所有术语的计数应为零(这很好).但我希望能够在任何新语料库中复制完全相同的DTM(在结构方面).

任何想法/想法?

nlp r machine-learning text-mining tm

9
推荐指数
2
解决办法
7210
查看次数

来自CSV文件的R文本挖掘文档(每个文档一行)

我正在尝试使用R中的tm包,并且有一个客户反馈的CSV文件,每行都是不同的反馈实例.我想将此反馈的所有内容导入语料库,但我希望每行都是语料库中的不同文档,以便我可以比较DocTerms矩阵中的反馈.我的数据集中有超过10,000行.

最初我做了以下事情:

fdbk_corpus <-Corpus(VectorSource(fdbk), readerControl = list(language="eng"), sep="\t")
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含1个文档和> 10,000行的语料库,我想要> 10,000个文档,每个文档包含1行.

我想我可以在一个文件夹中拥有10,000多个单独的CSV或TXT文档并从中创建一个语料库...但我认为有一个比这更简单的答案,将每一行作为一个单独的文档阅读.

r documents corpus text-mining tm

9
推荐指数
1
解决办法
2万
查看次数

R中的文本分类

我的目标是自动将反馈电子邮件路由到相应的部门.
我的字段是FNUMBER,CATEGORY,SUBCATEGORY,Description.
我有上述6个月的数据格式 - 整个电子邮件DescriptionCATEGORY和一起存储SUBCATEGORY.

我必须分析DESCRIPTION列并找到Keywordsfor Each Category/subcategory和下一个反馈电子邮件进入时,它应该根据Keyword历史数据生成自动分类到类别和子类别.

我已将一个XML文件导入R - 用于R中的文本分类,然后将XML转换为带有必填字段的数据框.我有一个特定月份的23017记录 - 我只列出了前20个列作为下面的数据帧.

我有超过100个类别和子类别.
我是文本挖掘概念的新手 - 但是在SO和tm包的帮助下 - 我尝试了下面的代码:

step1 <-  structure(list(FNUMBER = structure(1:20, .Label = c(" 20131202-0885 ", 
"20131202-0886 ", "20131202-0985 ", "20131202-1145 ", "20131202-1227 ", 
"20131202-1228 ", "20131202-1235 ", "20131202-1236 ", "20131202-1247 ", 
"20131202-1248 ", "20131202-1249 ", "20131222-0157 ", "20131230-0668 ", 
"20131230-0706 ", "20131230-0776 ", "20131230-0863 ", …
Run Code Online (Sandbox Code Playgroud)

text r text-mining tm

9
推荐指数
1
解决办法
4713
查看次数

R tm removeWords函数不删除单词

我试图从我建立的语料库中删除一些单词,但它似乎没有起作用.我首先浏览所有内容并创建一个数据框,按照频率顺序列出我的单词.我使用此列表来识别我不感兴趣的单词,然后尝试创建一个删除了单词的新列表.但是,单词仍保留在我的数据集中.我想知道我做错了什么以及为什么这些话没有被删除?我已经包含以下完整代码:

install.packages("rvest")
install.packages("tm")
install.packages("SnowballC")
install.packages("stringr")
library(stringr) 
library(tm) 
library(SnowballC) 
library(rvest)

# Pull in the data I have been using. 
paperList <- html("http://journals.plos.org/plosone/search?q=nutrigenomics&sortOrder=RELEVANCE&filterJournals=PLoSONE&resultsPerPage=192")
paperURLs <- paperList %>%
  html_nodes(xpath="//*[@class='search-results-title']/a") %>%
  html_attr("href")
paperURLs <- paste("http://journals.plos.org", paperURLs, sep = "")
paper_html <- sapply(1:length(paperURLs), function(x) html(paperURLs[x]))

paperText <- sapply(1:length(paper_html), function(x) paper_html[[1]] %>%
                      html_nodes(xpath="//*[@class='article-content']") %>%
                      html_text() %>%
                      str_trim(.))
# Create corpus
paperCorp <- Corpus(VectorSource(paperText))
for(j in seq(paperCorp))
{
  paperCorp[[j]] <- gsub(":", " ", paperCorp[[j]])
  paperCorp[[j]] <- gsub("\n", " ", paperCorp[[j]])
  paperCorp[[j]] <- gsub("-", " ", paperCorp[[j]])
} …
Run Code Online (Sandbox Code Playgroud)

text r corpus text-mining tm

9
推荐指数
2
解决办法
3万
查看次数

以相同的方式处理由空格分隔的单词

我试图在同一时间找到多个文档中出现的单词.

让我们举个例子.

doc1: "this is a document about milkyway"
doc2: "milky way is huge"
Run Code Online (Sandbox Code Playgroud)

正如您在上面的2个文档中看到的那样,两个文档中都出现了"milkyway"字样,但在第二个文档中,"milkyway"用空格分隔,而在第一个doc中则不是.

我正在执行以下操作以在R中获取文档术语矩阵

library(tm)
tmp.text <- data.frame(rbind(doc1, doc2))
tmp.corpus <- Corpus(DataframeSource(tmp.text))
tmpDTM <- TermDocumentMatrix(tmp.corpus, control = list(tolower = T, removeNumbers = T, removePunctuation = TRUE,stopwords = TRUE,wordLengths = c(2, Inf)))
tmp.df <- as.data.frame(as.matrix(tmpDTM))
tmp.df

         1 2
document 1 0
huge     0 1
milky    0 1
milkyway 1 0
way      0 1
Run Code Online (Sandbox Code Playgroud)

milkyway根据上述矩阵,术语仅存在于第一个文档中.

我希望能够在上述矩阵中的术语"milkyway"的两个文档中获得1.这只是一个例子.我需要为很多文件做这件事.最终,我希望能够以类似的方式对待这些词语("银河"和"银河系").

编辑1:

我不能强制术语文档矩阵以这样的方式计算:对于它试图寻找的任何单词,它不应该只是将该单词作为字符串中的单独单词而是在字符串中查找?例如,一个词是milky,有一个文件this is milkyway所以这里目前milky本文档中不会发生,但如果算法会在字符串中的问题的话也将查找单词milky串内milkyway …

r corpus text-mining tm

9
推荐指数
1
解决办法
697
查看次数

高效的jaccard相似性DocumentTermMatrix

我想要一种有效计算文件之间的Jaccard相似性的方法tm::DocumentTermMatrix.我可以通过slam包做类似于余弦相似的事情,如本答案中所示.我在CrossValidated上遇到了另一个问题和响应,它是R特定的,但关于矩阵代数不一定是最有效的路径.我尝试使用更有效的slam函数来实现该解决方案,但是没有得到与使用将DTM强制转换为矩阵并使用的效率较低的方法相同的解决方案proxy::dist.

如何有效地计算R中大型DocumentTermMatrix文档之间的Jaccard相似度?

#Data&Pacages

library(Matrix);library(proxy);library(tm);library(slam);library(Matrix)

mat <- structure(list(i = c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 3L, 1L, 
    2L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), j = c(1L, 1L, 2L, 2L, 3L, 3L, 
    4L, 4L, 4L, 5L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L), v = c(1, 
    1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1), …
Run Code Online (Sandbox Code Playgroud)

r text-mining tm slam

9
推荐指数
1
解决办法
2249
查看次数

stemCompletion无效

我使用tm包进行修复数据的文本分析,将数据读入数据框,转换为Corpus对象,应用各种方法使用lower,stipWhitespace,removestopwords等清理数据.

取回Corpus对象为stemCompletion.

使用tm_map函数执行了stemDocument,我的对象词被阻止了

得到了预期的结果.

当我使用tm_map函数运行stemCompletion操作时,它不起作用并得到以下错误

UseMethod("words")中的错误:没有适用于"字"的方法应用于"字符"类的对象

执行trackback()以显示并获得如下步骤

> traceback()
9: FUN(X[[1L]], ...)
8: lapply(dictionary, words)
7: unlist(lapply(dictionary, words))
6: unique(unlist(lapply(dictionary, words)))
5: FUN(X[[1L]], ...)
4: lapply(X, FUN, ...)
3: mclapply(content(x), FUN, ...)
2: tm_map.VCorpus(c, stemCompletion, dictionary = c_orig)
1: tm_map(c, stemCompletion, dictionary = c_orig)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

tm

8
推荐指数
3
解决办法
8484
查看次数

标签 统计

tm ×10

r ×9

text-mining ×7

corpus ×4

text ×2

documents ×1

machine-learning ×1

nlp ×1

slam ×1