我试图解决我自己关于更改包中的tf-idf加权函数的问题tm:https://stackoverflow.com/questions/15045313/changing-tf-idf-weight-function-weight-not-by-occurrences-的长期的,但是按numbe
在这样做时,我正在查看weightTfIdf包含以下代码的函数m,即TermDocumentMatrix.
cs <- col_sums(m)
Run Code Online (Sandbox Code Playgroud)
和
rs <- row_sums(m)
Run Code Online (Sandbox Code Playgroud)
但我找不到任何有关功能的文件row_sums或col_sums; 当我尝试使用它们编写自己的加权函数时,我收到一个错误:Error in weighting(x) : could not find function "col_sums"
这些功能在哪里定义?
我已粘贴R下面的完整功能信息:
function (m, normalize = TRUE)
{
isDTM <- inherits(m, "DocumentTermMatrix")
if (isDTM)
m <- t(m)
if (normalize) {
cs <- col_sums(m)
if (any(cs == 0))
warning("empty document(s): ", paste(Docs(m)[cs ==
0], collapse = " "))
names(cs) <- seq_len(nDocs(m))
m$v <- m$v/cs[m$j]
}
rs …Run Code Online (Sandbox Code Playgroud) 使用R tm,我有一个术语doc矩阵:
文档术语矩阵(16977术语,29414文档)
非稀疏条目:355000/499006478稀疏度:100%最大术语长度:7加权:术语频率(tf)
为了进一步分析,我必须将术语数限制为2425.
如何通过在例如20以上的频率中包含freq来生成新的dtm?
由于矩阵很大,传统的方法as.matrix不能应用.
谢谢!
我只是试图用俄语,UTF-8编码的文本创建一个语料库.问题是,tm包中的Corpus方法没有正确编码字符串.
这是我的问题的可重现的例子:
加载俄文文本:
> data <- c("Renault Logan, 2005","????????? ?????????, 345 ?²",
"??-???","3-? ????????, 64 ?², 3/5 ??.","Samsung galaxy S4 mini GT-I9190 (??????)")
Run Code Online (Sandbox Code Playgroud)
创建一个VectorSource:
> vs <- VectorSource(data)
> vs # outputs correctly
Run Code Online (Sandbox Code Playgroud)
然后,创建语料库:
> corp <- Corpus(vs)
> inspect(corp) # output is not encoded properly
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
> inspect(corp)
<<VCorpus (documents: 5, metadata (corpus/indexed): 0/0)>>
[[1]]
<<PlainTextDocument (metadata: 7)>>
Renault Logan, 2005
[[2]]
<<PlainTextDocument (metadata: 7)>>
Ñêëàäñêîå ïîìåùåíèå, 345 ì<U+00B2>
[[3]]
<<PlainTextDocument (metadata: 7)>>
Ñó-øåô
[[4]]
<<PlainTextDocument (metadata: …Run Code Online (Sandbox Code Playgroud) 我对tm r库有一个(小)问题.说我有一个语料库:
# boilerplate
bcorp <- c("one","two","three","four","five")
myCorpus <- Corpus(VectorSource(bcorp), list(lanuage = "en_US"))
tdm <- TermDocumentMatrix(myCorpus)
Docs(tdm)
Run Code Online (Sandbox Code Playgroud)
结果:
[1] "1" "2" "3" "4" "5"
Run Code Online (Sandbox Code Playgroud)
这有效.但是当我尝试使用转换tm_map()时:
# this does not work
myCorpus <- Corpus(VectorSource(bcorp), list(lanuage = "en_US"))
myCorpus <- tm_map(myCorpus, tolower)
tdm <- TermDocumentMatrix(myCorpus)
Run Code Online (Sandbox Code Playgroud)
给
Error: inherits(doc, "TextDocument") is not TRUE
Run Code Online (Sandbox Code Playgroud)
在这种情况下提出的解决方案是转换为PlainTextDocument.
# this works but erase the metadata
myCorpus <- Corpus(VectorSource(bcorp), list(lanuage = "en_US"))
myCorpus <- tm_map(myCorpus, tolower)
myCorpus <- tm_map(myCorpus, PlainTextDocument)
tdm <- TermDocumentMatrix(myCorpus)
Docs(tdm)
Run Code Online (Sandbox Code Playgroud)
结果:
[1] "character(0)" "character(0)" …Run Code Online (Sandbox Code Playgroud) 我有一个spsMatrix(库矩阵)或一个simple_triplet_matrix(库满贯)的docs x术语,例如:
library(Matrix)
mat <- sparseMatrix(i = c(1,2,4,5,3), j = c(2,3,4,1,5), x = c(3,2,3,4,1))
rownames(mat) <- paste0("doc", 1:5)
colnames(mat) <- paste0("word", 1:5)
5 x 5 sparse Matrix of class "dgCMatrix"
word1 word2 word3 word4 word5
doc1 . 3 . . .
doc2 . . 2 . .
doc3 . . . . 1
doc4 . . . 3 .
doc5 4 . . . .
Run Code Online (Sandbox Code Playgroud)
要么:
library(slam)
mat2 <- simple_triplet_matrix(c(1,2,4,5,3), j = c(2,3,4,1,5), v = c(3,2,3,4,1),
dimnames = list(paste0("doc", 1:5), …Run Code Online (Sandbox Code Playgroud) 我正在构建一个Shiny应用程序,它接受用户的文本输入,将最后两个单词与三元组的数据框进行比较,以预测最可能的下一个单词.在server.R下面,我试图ouptut的triPred函数的输出是一个单词.当我加载这个应用程序后,我在应用程序中键入一些文本后出现以下错误 - '参数1(类型'封闭')无法由'cat'处理 - 这似乎与server.R中的最后一行有关.这只是一个单词,我不清楚什么是'cat'失败,即连接.
server.R
library(stringr)
shinyServer(function(input, output) {
triSplit <- function(input) {
el <- unlist(str_split(input," "))
bigram <- paste(el[length(el)-1],el[length(el)])
return(bigram)
}
triPred <- function(input) {
## pulls out end words that match the input bigram
temp_wf_T <- wf_T[wf_T$start == triSplit(input),]
##Picks one of the best options at random based on count
ans <- sample(temp_wf_T$end[temp_wf_T$count == max(temp_wf_T$count)],1)
return(ans) }
##Read in a dataframe of bigrams, their possible completions, and counts of occurence
wf_T<-readRDS("C:/Users/LTM/DataScienceCertificateCapstone/ShinyTest/data/tdm.rds")
##Runs the triPred function to guess …Run Code Online (Sandbox Code Playgroud) 我在做使用R.文本分析有没有办法删除所有的话不是在盖使用tm或stringi?
如果我有这样的事情
Albert Einstein went to the store and saw his friend Nikola Tesla ... + 200 pags
Run Code Online (Sandbox Code Playgroud)
被转换成
Albert Einstein Nikola Tesla
Run Code Online (Sandbox Code Playgroud)
最好的祝福
我收集了一些推特数据:
#connect to twitter API
setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)
#set radius and amount of requests
N=200 # tweets to request from each query
S=200 # radius in miles
lats=c(38.9,40.7)
lons=c(-77,-74)
roger=do.call(rbind,lapply(1:length(lats), function(i) searchTwitter('Roger+Federer',
lang="en",n=N,resultType="recent",
geocode=paste (lats[i],lons[i],paste0(S,"mi"),sep=","))))
Run Code Online (Sandbox Code Playgroud)
在此之后我完成了:
rogerlat=sapply(roger, function(x) as.numeric(x$getLatitude()))
rogerlat=sapply(rogerlat, function(z) ifelse(length(z)==0,NA,z))
rogerlon=sapply(roger, function(x) as.numeric(x$getLongitude()))
rogerlon=sapply(rogerlon, function(z) ifelse(length(z)==0,NA,z))
data=as.data.frame(cbind(lat=rogerlat,lon=rogerlon))
Run Code Online (Sandbox Code Playgroud)
现在我想获得所有具有long和lat值的推文:
data=filter(data, !is.na(lat),!is.na(lon))
lonlat=select(data,lon,lat)
Run Code Online (Sandbox Code Playgroud)
但是现在我只获得了NA值....对这里出了什么问题的任何想法?
创建Wordclouds时,最常见的做法是将所有单词都小写。但是,我希望wordclouds将单词显示为大写。强制单词为大写字母后,wordcloud仍显示小写单词。有什么想法吗?
可复制的代码:
library(tm)
library(wordcloud)
data <- data.frame(text = c("Creativity is the art of being ‘productive’ by using
the available resources in a skillful manner.
Scientifically speaking, creativity is part of
our consciousness and we can be creative –
if we know – ’what goes on in our mind during
the process of creation’.
Let us now look at 6 examples of creativity which blows the mind."))
text <- paste(data$text, collapse = " ")
# I am using toupper() to force …Run Code Online (Sandbox Code Playgroud) 在tm0.7-1版本中,有一个readTabular()功能.现在它消失了,如果你试图使用它,就没有弃用消息或警告或任何东西,就像你可能合理期望的那样.它刚刚消失了.在遥远的过去(4天前),它可以像:
library(tm)
myReader <- tm::readTabular(mapping=list(id="id", content="content"))
cor <- tm::VCorpus(tm::DataframeSource(dt), readerControl = list(reader = myReader))
Run Code Online (Sandbox Code Playgroud)
那么你如何在tm0.7-2 的最新版本中做同样的事情呢?
PS:我认为最新版本大约在4天前发布,但很难从回购的新闻部分看出来,这似乎有一个讨厌的格式错误或其他东西.此外,我认为readTabular在2009年被引入为"实验性".不知道为什么它被删除,如果有人可以在回购中找到任何解释,请发布链接. 这是readTabular的文档.