计算一个列表中出现在字符串中的单词数
Count number of words in one list that appear in a string
我在字符向量中有一组独特的单词(已经 'stemmed'),我想知道其中有多少单词出现在一个字符串中。
这是我目前的情况:
library(RTextTools)
string <- "Players Information donation link controller support years fame glory addition champion Steer leader gang ghosts life Power Pellets tables gobble ghost"
wordstofind <- c("player","fame","field","donat")
# I created a stemmed list of the string
string.stem <- colnames(create_matrix(string, stemWords = T, removeStopwords = F))
我知道下一步可能涉及 grepl("\bword\b,value")
或正则表达式的一些用法,但我不确定在这种情况下最快的选择是什么。
这是我的标准:
- 我必须多次这样做,所以尽可能快是一个问题。
- 它应该匹配整个单词("es" 不应该匹配 "test")。
任何朝着正确方向的推动都会很棒。
好吧,我从不处理庞大的数据集,所以时间从来都不是最重要的,但是根据您提供的数据,这会让您计算出 确切 匹配字符串中的内容。可能是一个很好的起点。
sum(wordstofind %in% unlist(strsplit(string, " ")))
> sum(wordstofind %in% unlist(strsplit(string, " ")))
[1] 1
编辑 使用词干获得正确的 3 个匹配项,感谢@Anthony Bissel:
sum(wordstofind %in% unlist(string.stem))
> sum(wordstofind %in% unlist(string.stem))
[1] 3
当然可能有更快的选择,但这个可行:
length(wordstofind) - length(setdiff(wordstofind, string.stem)) # 3
但看起来安德鲁·泰勒的回答更快:
`microbenchmark(sum(wordstofind %in% unlist(string.stem)), length(wordstofind) - length(setdiff(wordstofind, string.stem)))
Unit: microseconds
expr min lq mean median uq max neval
sum(wordstofind %in% unlist(string.stem)) 4.016 4.909 6.55562 5.355 5.801 37.485 100
length(wordstofind) - length(setdiff(wordstofind, string.stem)) 16.511 16.958 21.85303 17.404 18.296 81.218 100`
看看 Hadley Wickham 的 stringr。您可能正在寻找函数 str_count
。
我在字符向量中有一组独特的单词(已经 'stemmed'),我想知道其中有多少单词出现在一个字符串中。
这是我目前的情况:
library(RTextTools)
string <- "Players Information donation link controller support years fame glory addition champion Steer leader gang ghosts life Power Pellets tables gobble ghost"
wordstofind <- c("player","fame","field","donat")
# I created a stemmed list of the string
string.stem <- colnames(create_matrix(string, stemWords = T, removeStopwords = F))
我知道下一步可能涉及 grepl("\bword\b,value")
或正则表达式的一些用法,但我不确定在这种情况下最快的选择是什么。
这是我的标准:
- 我必须多次这样做,所以尽可能快是一个问题。
- 它应该匹配整个单词("es" 不应该匹配 "test")。
任何朝着正确方向的推动都会很棒。
好吧,我从不处理庞大的数据集,所以时间从来都不是最重要的,但是根据您提供的数据,这会让您计算出 确切 匹配字符串中的内容。可能是一个很好的起点。
sum(wordstofind %in% unlist(strsplit(string, " ")))
> sum(wordstofind %in% unlist(strsplit(string, " ")))
[1] 1
编辑 使用词干获得正确的 3 个匹配项,感谢@Anthony Bissel:
sum(wordstofind %in% unlist(string.stem))
> sum(wordstofind %in% unlist(string.stem))
[1] 3
当然可能有更快的选择,但这个可行:
length(wordstofind) - length(setdiff(wordstofind, string.stem)) # 3
但看起来安德鲁·泰勒的回答更快:
`microbenchmark(sum(wordstofind %in% unlist(string.stem)), length(wordstofind) - length(setdiff(wordstofind, string.stem)))
Unit: microseconds
expr min lq mean median uq max neval
sum(wordstofind %in% unlist(string.stem)) 4.016 4.909 6.55562 5.355 5.801 37.485 100
length(wordstofind) - length(setdiff(wordstofind, string.stem)) 16.511 16.958 21.85303 17.404 18.296 81.218 100`
看看 Hadley Wickham 的 stringr。您可能正在寻找函数 str_count
。