从向量中查找文本中的匹配词

ecl

我得到了包含一组较短文本的数据框。我也有一个包含关键字列表的向量。我想添加一个新列,其中每个文本匹配的关键字都作为值添加到新列中。

我添加代码以创建数据框的演示版。

id <- c(1,2,4,5,6,7)
full_text <- c("I like banana", "I ate an apple", "I prefer bananas and apples", "Grapes", "My applepie is tasty", "Fruitsalad")

df <- data.frame(id = id,full_text = full_text)

这给出了以下数据帧:

  id                   full_text
1  1               I like banana
2  2              I ate an apple
3  4 I prefer bananas and apples
4  5                      Grapes
5  6        My applepie is tasty
6  7                  Fruitsalad

然后,我有一个包含一些单词的向量。见下文:

keywords <- c("banana", "apple", "grape")

在实践中,我要确定谁都有一个或多个观察keywords他们 df$full_text如果df$full_text包含一个或多个单词,我想将这些关键字添加到名为的新列中key_word这应该提供一个类似于以下数据帧:

  id                   full_text      key_word
1  1               I like banana        banana
2  2              I ate an apple         apple
3  4 I prefer bananas and apples banana, apple
4  5                      Grapes         grape
5  6        My applepie is tasty         apple
6  7                  Fruitsalad              

我最初的策略是尝试与一起使用ifelsegrepl但无法使其正常工作。

丹尼斯

使用stringrstr_replace_all您可以执行以下操作:

df$keyword <- str_extract_all(tolower(df$full_text),paste(keywords,collapse  = "|")) %>%
  lapply(.,function(x) paste(x,collapse = ", ")) %>%
  unlist()

paste(keywords,collapse = "|")是用正则表达式表示“查找我的向量的任何单词”:您常|说或

paste(keywords,collapse  = "|")
[1] "banana|apple|grape"

str_extract_all 为您提供一个列表,其中列出了它为向量的每个条目找到的各种条目:

str_extract_all(tolower(df$full_text),paste(keywords,collapse  = "|"))
[[1]]
[1] "banana"

[[2]]
[1] "apple"

[[3]]
[1] "banana" "apple" 

[[4]]
[1] "grape"

[[5]]
[1] "apple"

[[6]]
character(0)

因此,如果将它们与function(x) paste(x,collapse = ", ")unlist列表合并在一起,则可以获得所需的内容。我加了tolower,因为你想认识Grapegrape

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章