我想计算包含双引号的文本中句子的百分比,并编写了以下函数来执行此操作:
library(tokenizers)
quote_ratio <- function(text){
sentences <- tokenize_sentences(text, simplify = TRUE)
quote_sentences <- 0
for (i in sentences){
quote_hits <- grepl('\\"', i)
if (quote_hits == TRUE) {
quote_sentences <- quote_sentences + 1
}
}
ratio <- quote_sentences / length(sentences)
return (ratio)
}
该功能在许多情况下都有效,但是在我的句子中遇到NA和/或NULL值的问题时,我遇到了更多的数据。
library(tm)
corpus = VCorpus(DirSource("/path/to/directory"))
ratios <- tm_map(corpus, content_transformer(quote_ratio))
# Error in if (quote_hits == TRUE) { : argument is of length zero
# In addition: Warning message:
# In if (quote_hits == TRUE) { : the condition has length > 1 and only the first element will be used
我尝试更改if语句以检查null和NA值,如下所示:
if (!is.na(quote_hits) && !is.null(quote_hits) && quote_hits == TRUE) {
但这只会产生更多错误:
# Error in if (!is.na(quote_hits) && !is.null(quote_hits) && quote_hits == : missing value where TRUE/FALSE needed
有没有更好的方法来制定if语句和/或函数?非常感谢。
编辑:
我后来意识到使用tm_map
和content_transformer
函数来计算它可能是错误的。当我将文本存储在向量中并使用lapply
时,该函数工作得很好。