R计算列表中的单词在句子中出现的频率
目前正在参加一个MOOC并尝试一些情绪分析,但在R代码方面遇到了问题 我有一张坏词和一张好词的清单。例如,我的坏话是c(“凹痕”、“破损”、“磨损”、“破裂”)等等 我的数据框中有一个描述列表,我想做的是统计列表中出现了多少我的坏单词,以及每行出现了多少我的好单词 例如,假设这是我的数据帧R计算列表中的单词在句子中出现的频率,r,sentiment-analysis,R,Sentiment Analysis,目前正在参加一个MOOC并尝试一些情绪分析,但在R代码方面遇到了问题 我有一张坏词和一张好词的清单。例如,我的坏话是c(“凹痕”、“破损”、“磨损”、“破裂”)等等 我的数据框中有一个描述列表,我想做的是统计列表中出现了多少我的坏单词,以及每行出现了多少我的好单词 例如,假设这是我的数据帧 desc = c("this screen is cracked", "minor dents and scratches", "100% good", "in perfect condition")
desc = c("this screen is cracked", "minor dents and scratches", "100% good", "in perfect condition")
id = c(1,2,3,4)
df = data.frame(id, desc)
bad.words = c("cracked", "scratches", "dents")
我想做的是做一个sum列,计算每个坏单词在描述中出现的频率
所以希望我最后的df看起来像
id desc sum
1 "this screen is cracked" 1
2 "minor dents and scratches" 2
3 "100% good" 0
4 "in perfect condition" 0
到目前为止,我得到的是
df$sum <- grepl(paste( bad.words, collapse="|"), df$desc)
df$sum如果您正在查找一个和,vapply()
比sapply()
更合适。你可以
library(stringi)
df$sum <- vapply(df$desc, function(x) sum(stri_count_fixed(x, bad.words)), 1L)
如果您正在查找一个和,vapply()
比sapply()
更合适。你可以
library(stringi)
df$sum <- vapply(df$desc, function(x) sum(stri_count_fixed(x, bad.words)), 1L)
因为你可能会尝试不同的单词列表,比如good.words,bad.words,really.bad.words;我会写一个函数。我喜欢拉普拉,但瓦皮和其他人也会工作
countwords <- function(x,comparison){
lapply(x,function(x,comparewords){
sum(strsplit(x,' ')[[1]] %in% comparewords)
},comparewords = comparison)
}
df$good <- countwords(df$desc,good.words)
df$bad <- countwords(df$desc,bad.words)
countwords因为你可能会尝试不同的单词列表,比如good.words,bad.words,really.bad.words;我会写一个函数。我喜欢拉普拉,但瓦皮和其他人也会工作
countwords <- function(x,comparison){
lapply(x,function(x,comparewords){
sum(strsplit(x,' ')[[1]] %in% comparewords)
},comparewords = comparison)
}
df$good <- countwords(df$desc,good.words)
df$bad <- countwords(df$desc,bad.words)
countwords总和(grepl(粘贴(bad.words,collapse=“|”)和描述))?如果是这样的话,yeah尝试了一下,但是结果似乎并不正确,因为所有列都有相同的值。最终的目标是尝试使用正则表达式,所以crack也会匹配cracked和或crackstried,以使其更加清晰,因为仍然无法使用sapply可能是colSums(sappy)(df$desc,function(x)sappy)(bad.words,function(y)sum(grepl(y,x‘‘)’)
或sapply(strsplit(as.character(df$desc),“”),函数(x)sum(x%以%bad.words表示))
sum(grepl(粘贴(bad.words,collapse=“|”)说明))?如果是这样的话,yeah尝试了一下,但结果似乎并不正确,因为所有列都有相同的值。最终的目标是尝试使用正则表达式,所以crack也会匹配cracked和/或crackstried,以使其更加清晰,因为仍然无法使用sapply可能是colSums(sappy)(df$desc,function(x)sappy)(bad.words,function(y)sum(grepl(y,x‘‘‘‘)
或sapply(strsplit(as.character(df$desc),“”),函数(x)和(x%在%bad.words中))