从数据表列值中的字典搜索字符串

问题描述 投票:0回答:1

[有一个data.table dt,其中每一行都有一列文字句子(dt $ text)。然后,有一个包含单词的字典(较小的data.table,每行只有一个单词:dict $ word)。

我需要遍历dt中的每个列值,如果句子中有字典中的任何单词,请将值“ 1”放在新的dt列“ Is_in_dict”中。哪个是最快的方法?我知道,我可以使用grepl(“ Search_word,” Text_to_search“,fixed = TRUE)在文本字符串中搜索文本。我尝试执行以下操作:

for (dummy_k in 1:nrow(dt)) {
  ifelse(dt[dummy_k, Is_in_dict] != 1, 
    for (dummy_l in 1:nrow(dict)) {
      dt[dummy_k, Is_in_dict] <- ifelse(grepl(dict[dummy_l, word],    dt[dummy_k, text], fixed=TRUE), 1, 0)
        }
      , 0)
    }

我收到错误:ans [ypos]

还有,还有比遍历dt和dict更快的方法吗?

r string dictionary search data.table
1个回答
0
投票

在等待任何示例数据之前,我认为您的数据看起来像这样:

数据

dt = data.table(
  text = c('cat, dog', 'horse')
)

dict = data.table(
  word = c('cat')
)

下面是data.table解决方案:

代码

dt[, IsInDict := sapply(text, function(x){

  strings = unlist(strsplit(x, ', '))
  fifelse(sum(strings %in% dict$word) > 0, 1, 0)

})]

代码使用dt$text分割strsplit()中的每个句子,并检查其任何单词是否出现在dict$word中。

结果

> dt
       text IsInDict
1: cat, dog        1
2:    horse        0

当然,解决方案对dt$text中的单词如何分隔很敏感-在我的情况下,它们是由', '分隔的。

© www.soinside.com 2019 - 2024. All rights reserved.