计算多个文本中的单词时输出错误
Wrong output when counting words in multiple texts
我有 2 个数据集,一个包含 500 个不同的实体,其中测量了一些变量。另一个有 500 个文本,其中每个文本都属于第一个数据集中的实体。我想在这些文本中搜索 3 个关键字,并统计每个文本中关键字的总出现次数。
一些随机数据作为随机表示,keywords 是一个向量,texts 是一个包含文本的列表(我有一个列表,不知道我的示例列表在这里是否正确),df 是包含我的实体变量的数据框:
keywords <- c("ab", "cd", "ef")
texts <- as.list("ab is ef when ef is ef",
"something something nothing",
"cd is cd is ab is ab and ef")
var1 <- c("area1", "area2", "area3")
var2 <- c("15", "5", "23")
df <- data.frame(var1, var2)
colnames(df) <- c("location", "temperature")
这里的正确答案是关键字在第一篇文章中出现了 4 次,在第二篇文章中出现了 0 次,在第三篇文章中出现了 5 次。但是,当我尝试以下操作时,它给出了错误的输出:
df$count <- 0 # Store the results
# counting for all keywords
for(w in keywords){
df$count <-
df$count +
grepl(w, texts, ignore.case = T)
print(w)
}
df$count
关于我可以做什么的任何提示?最好有一些示例代码?
提前致谢
您的 texts
是一个列表。这是有原因的吗?而是将其设为矢量。
你也可以更轻松地数数。也许试试 stringr
包。那么你可以做
library(stringr)
keywords <- c("ab", "cd", "ef")
texts <- c("ab is ef when ef is ef",
"something something nothing",
"cd is cd is ab is ab and ef")
str_count(texts, "ab|cd|ef")
[1] 4 0 5
如果你不能按照上面的方式设置模式,你也可以去
str_count(texts, paste(keywords, collapse = "|"))
我有 2 个数据集,一个包含 500 个不同的实体,其中测量了一些变量。另一个有 500 个文本,其中每个文本都属于第一个数据集中的实体。我想在这些文本中搜索 3 个关键字,并统计每个文本中关键字的总出现次数。
一些随机数据作为随机表示,keywords 是一个向量,texts 是一个包含文本的列表(我有一个列表,不知道我的示例列表在这里是否正确),df 是包含我的实体变量的数据框:
keywords <- c("ab", "cd", "ef")
texts <- as.list("ab is ef when ef is ef",
"something something nothing",
"cd is cd is ab is ab and ef")
var1 <- c("area1", "area2", "area3")
var2 <- c("15", "5", "23")
df <- data.frame(var1, var2)
colnames(df) <- c("location", "temperature")
这里的正确答案是关键字在第一篇文章中出现了 4 次,在第二篇文章中出现了 0 次,在第三篇文章中出现了 5 次。但是,当我尝试以下操作时,它给出了错误的输出:
df$count <- 0 # Store the results
# counting for all keywords
for(w in keywords){
df$count <-
df$count +
grepl(w, texts, ignore.case = T)
print(w)
}
df$count
关于我可以做什么的任何提示?最好有一些示例代码?
提前致谢
您的 texts
是一个列表。这是有原因的吗?而是将其设为矢量。
你也可以更轻松地数数。也许试试 stringr
包。那么你可以做
library(stringr)
keywords <- c("ab", "cd", "ef")
texts <- c("ab is ef when ef is ef",
"something something nothing",
"cd is cd is ab is ab and ef")
str_count(texts, "ab|cd|ef")
[1] 4 0 5
如果你不能按照上面的方式设置模式,你也可以去
str_count(texts, paste(keywords, collapse = "|"))