使用dplyr和stringr从文本中提取单词

使用dplyr和stringr从文本中提取单词,r,regex,string,dplyr,R,Regex,String,Dplyr,我试图找到一种有效的方法,从数据集中的文本列中提取单词。我使用的方法是 library(dplyr) library(stringr) Text = c("A little bird told me about the dog", "A pig in a poke", "As busy as a bee") data = as.data.frame(Text) keywords <- paste0(c("bird", "dog", "pig","wolf","cat", "bee", "

我试图找到一种有效的方法,从数据集中的文本列中提取单词。我使用的方法是

library(dplyr)
library(stringr)

Text = c("A little bird told me about the dog", "A pig in a poke", "As busy as a bee")
data = as.data.frame(Text)
keywords <- paste0(c("bird", "dog", "pig","wolf","cat", "bee", "turtle"), collapse = "|")
data %>% mutate(Word = str_extract(Text, keywords))
这只是一个例子,但我有超过2000个可能的单词从每一行提取。我不知道还有什么方法可以使用,但事实上我会有一个大的正则表达式,这会让事情变慢,或者与正则表达式的大小无关?我认为每行不会出现一个以上的单词,但如果每行出现一个以上的单词,有一种方法可以自动生成多个列?

尝试将关键字作为数组相交

data <- data.frame(Text = Text, Word = sapply(Text, function(v) intersect(unlist(strsplit(v,split = " ")),keywords),USE.NAMES = F))
尝试将关键字作为数组相交

data <- data.frame(Text = Text, Word = sapply(Text, function(v) intersect(unlist(strsplit(v,split = " ")),keywords),USE.NAMES = F))
我们可以使用str_extract_all返回列表,将列表元素转换为命名列表或tibble,并使用unnest_

我们可以使用str_extract_all返回列表,将列表元素转换为命名列表或tibble,并使用unnest_


您是否需要v1%set_Names1%>%作为_tible%>%bind_colsdata。这在很大程度上取决于您是要匹配整个单词还是只匹配字符序列。您是否需要v1%set_Names1%>%作为_tible%>%bind_colsdata。这在很大程度上取决于您是要匹配整个单词还是只匹配字符序列。这正是我想要的。我只是有一些来自R新手的疑问。在unique中,您传递了一个参数.x,但没有x变量,所以这意味着要在每行中查找唯一的值?使用set_names时,它会根据唯一单词的数量创建新列,然后再使用unnest_wide拆分列表?真该死。内部seq-along-means?@Roland the~.x是functionx x的一个较短版本,用于匿名函数。在tidyverse中,传递的默认值为。或.x。您还可以将其更改为带有mapWords的常规函数,functionx as.listuniquex%>%,这正是我想要的。我只是有一些来自R新手的疑问。在unique中,您传递了一个参数.x,但没有x变量,所以这意味着要在每行中查找唯一的值?使用set_names时,它会根据唯一单词的数量创建新列,然后再使用unnest_wide拆分列表?真该死。内部seq-along-means?@Roland the~.x是functionx x的一个较短版本,用于匿名函数。在tidyverse中,传递的默认值为。或.x。您还可以将其更改为带有映射词的常规函数,functionx as.listuniquex%>%