0

我在字符向量中有一组独特的单词(已被“提取”),我想知道其中有多少出现在字符串中。

这是我到目前为止所拥有的:

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”)。

任何朝着正确方向的推动都会很棒。

4

3 回答 3

2

好吧,我从不使用庞大的数据集,所以时间从来都不是最重要的,但是鉴于您提供的数据,这将让您计算出有多少单词与字符串中的某些内容完全匹配。可能是一个很好的起点。

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
于 2015-01-23T12:59:19.567 回答
2

看看Hadley Wickham 的stringr。您可能正在寻找功能str_count

于 2015-01-23T13:03:59.293 回答
0

当然可能有更快的选择,但这有效:

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`
于 2015-01-23T13:01:14.840 回答