我有两个以下DTM-s:
dtm <- DocumentTermMatrix(t)
dtmImproved <- DocumentTermMatrix(t,
control=list(minWordLength = 4, minDocFreq=5))
Run Code Online (Sandbox Code Playgroud)
当我实现这个时,我看到两个相同的DTM-s,如果我打开它dtmImproved,就会有3个符号的单词.为什么minWordLength参数不起作用?谢谢!
> dtm
A document-term matrix (591 documents, 10533 terms)
Non-/sparse entries: 43058/6181945
Sparsity : 99%
Maximal term length: 135
Weighting : term frequency (tf)
> dtmImproved
A document-term matrix (591 documents, 10533 terms)
Non-/sparse entries: 43058/6181945
Sparsity : 99%
Maximal term length: 135
Weighting : term frequency (tf)
Run Code Online (Sandbox Code Playgroud) 我正在对一个大型数据库进行文本挖掘,以创建指示变量,指示观察的注释字段中某些短语的出现.评论由技术人员输入,因此使用的术语始终保持一致.
但是,在某些情况下,技术人员拼错了一个单词,因此我的grepl()函数没有发现观察中发生的短语(尽管是错误的).理想情况下,我希望能够将短语中的每个单词提交给一个函数,这将返回几个常见的拼写错误或所述单词的拼写错误.这样的R函数是否存在?
有了这个,我可以在注释字段中搜索短语的这些拼写错误的所有可能组合,并将其输出到另一个数据帧.这样,我可以根据具体情况查看每个出现的情况,以确定我感兴趣的现象是否实际上由技术人员描述.
我已经用Google搜索了,但只找到了对R.的实际拼写检查包的引用.我要找的是一个"反向"拼写检查器.由于我所寻找的短语数量相对较少,我实际上可以手工检查拼写错误; 我只是认为将这种能力内置到R包中以便将来进行文本挖掘工作会很不错.
感谢您的时间!
我使用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)
我该如何解决这个错误?
我正在尝试清理语料库,我使用了典型的步骤,如下面的代码:
docs<-Corpus(DirSource(path))
docs<-tm_map(docs,content_transformer(tolower))
docs<-tm_map(docs,content_transformer(removeNumbers))
docs<-tm_map(docs,content_transformer(removePunctuation))
docs<-tm_map(docs,removeWords,stopwords('en'))
docs<-tm_map(docs,stripWhitespace)
docs<-tm_map(docs,stemDocument)
dtm<-DocumentTermMatrix(docs)
Run Code Online (Sandbox Code Playgroud)
然而,当我检查矩阵时,几乎没有带引号的单词,例如:"我们""公司""代码指南" - 已知 - 加速
似乎单词本身在引号内,但当我尝试再次运行removePunctuation代码时,它不起作用.前面还有一些带子弹的话我也无法删除.
任何帮助将不胜感激.
每当我运行此代码时,tm_map 行都会给我警告消息作为警告消息:在 tm_map.SimpleCorpus(docs, toSpace, "/") 中:转换丢弃文档
texts <- read.csv("./Data/fast food/Domino's/Domino's veg pizza.csv",stringsAsFactors = FALSE)
docs <- Corpus(VectorSource(texts))
toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, stopwords("english"))
docs <- tm_map(docs, removeWords, c("blabla1", "blabla2"))
docs <- tm_map(docs, removePunctuation)
docs <- tm_map(docs, stripWhitespace)
Run Code Online (Sandbox Code Playgroud) 我在R中termDocumentMatrix创建了一个tm包.
我正在尝试创建一个具有50个最常出现的术语的矩阵/数据帧.
当我尝试转换为矩阵时,我收到此错误:
> ap.m <- as.matrix(mydata.dtm)
Error: cannot allocate vector of size 2.0 Gb
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用Matrix包转换为稀疏矩阵:
> A <- as(mydata.dtm, "sparseMatrix")
Error in as(from, "CsparseMatrix") :
no method or default for coercing "TermDocumentMatrix" to "CsparseMatrix"
> B <- Matrix(mydata.dtm, sparse = TRUE)
Error in asMethod(object) : invalid class 'NA' to dup_mMatrix_as_geMatrix
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法访问tdm的不同部分:
> freqy1 <- data.frame(term1 = findFreqTerms(mydata.dtm, lowfreq=165))
> mydata.dtm[mydata.dtm$ Terms %in% freqy1$term1,]
Error in seq_len(nr) : argument must be coercible to non-negative integer
Run Code Online (Sandbox Code Playgroud)
这是其他一些信息: …
在tm文本挖掘R包的源代码中,在文件transform.R中,有一个removePunctuation()函数,当前定义为:
function(x, preserve_intra_word_dashes = FALSE)
{
if (!preserve_intra_word_dashes)
gsub("[[:punct:]]+", "", x)
else {
# Assume there are no ASCII 1 characters.
x <- gsub("(\\w)-(\\w)", "\\1\1\\2", x)
x <- gsub("[[:punct:]]+", "", x)
gsub("\1", "-", x, fixed = TRUE)
}
}
Run Code Online (Sandbox Code Playgroud)
我需要从科学会议中解析并挖掘一些摘要(从他们的网站上获取为UTF-8).摘要包含一些需要删除的unicode字符,特别是在字边界处.有通常的ASCII标点字符,但也有一些Unicode破折号,Unicode引号,数学符号......
文本中还有URL,标点符号中需要保留字符标点符号.tm的内置removePunctuation()功能太激进了.
所以我需要一个自定义removePunctuation()功能来根据我的要求进行删除.
我的自定义Unicode函数现在看起来像这样,但它不能按预期工作.我很少使用R,因此在R中完成任务需要一些时间,即使对于最简单的任务也是如此.
我的功能:
corpus <- tm_map(corpus, rmPunc = function(x){
# lookbehinds
# need to be careful to specify fixed-width conditions
# so that it can be used in lookbehind
x <- …Run Code Online (Sandbox Code Playgroud) 我是新来的tm包装.我想使用DocumentTermMatrix函数来创建DT-Matrix以进行进一步的文本挖掘分析,但我能够为该函数创建propoer输入.
到目前为止,我的数据输入是以这样的字符向量的格式,并尝试使用as.VCorpus函数,但它看起来像它不起作用.代码如下:
> x <- as.VCorpus(sekcja_link$slowa_kluczowe_2)
Error in UseMethod("as.VCorpus") :
no applicable method for 'as.VCorpus' applied to an object of class "character"
> head(sekcja_link$slowa_kluczowe_2)
[1] "mandat policja zima kara"
[2] "sprzeda? samochodów w 2014 rok wzrost sprzeda?y utrata prawa jazda wyprzedzać trzeci poduszka powietrzny"
[3] "kobieta 40stce powinien rusza? walczyć ?ycie ewa minge kasia czaplejewicz fitness"
[4] "e booki ksi??ka elektroniczny papierowy czytnik amazon kindle ksi??ki rynek booków handel i us?ugi"
[5] "gra monopoly …Run Code Online (Sandbox Code Playgroud) 我使用R 从文本中提取包含特定人名的句子,这里是一个示例段落:
作为蒂宾根的改革者,他接受了由他的叔叔Johann Reuchlin推荐的Martin Luther对维滕贝格大学的电话.Melanchthon在21岁时成为维滕贝格的希腊语教授.他研究了圣经,特别是保罗和福音派教义.他作为旁观者出席了莱比锡(1519)的辩论,但参与了他的评论.约翰·埃克(Johann Eck)攻击了他的观点,梅兰克顿(Melanchthon)在他的Defensio对手Johannem Eckium的基础上回复了圣经的权威.
在这个短段中,有几个人的名字,如: Johann Reuchlin,Melanchthon,Johann Eck.在openNLP软件包的帮助下,可以正确地提取和识别Martin Luther,Paul和Melanchthon三个人的名字.然后我有两个问题:
我想知道如何从文本字符串中获取唯一的字符数.假设我正在寻找重复单词中的苹果,香蕉,菠萝,葡萄的重复计数.
A<- c('I have a lot of pineapples, apples and grapes. One day the pineapples person gave the apples person two baskets of grapes')
df<- data.frame(A)
Run Code Online (Sandbox Code Playgroud)
假设我想获得文本中列出的所有水果的独特计数.
library(stringr)
df$fruituniquecount<- str_count(df$A, "apples|pineapples|grapes|bananas")
Run Code Online (Sandbox Code Playgroud)
我尝试了这个,但我得到了所有的计数.我希望答案为'3'.请提出您的想法.