Vai*_*ngh 5 r tidyr tidyverse tidytext
我有一列包含字符串内容
temp <- c(NA, NA, "grocery pantry all offers", NA, "grocery offers today low price",
"grocery offers today low price", "tide soap", "tide soap bar",
"tide detergent powders 2kg", NA, "tide", "tide detergent powders 2kg",
"liquid detergent tide brand")
Run Code Online (Sandbox Code Playgroud)
我的目的是用紧挨着 Tide 的单词创建一个 bigram。为此,我需要过滤掉靠近潮汐的单词。无论是左侧还是右侧。对于上述输出中的 ex 将是
tide soap
tide soap
tide detergent
tide detergent
detergent tide
tide brand
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?
如果您使用 quanteda 包,这很简单。您指定要定位的单词并决定目标左侧/右侧的单词数量。
library(quanteda)
kwic(x = temp, pattern = "tide", window = 1) %>%
as.data.frame
docname from to pre keyword post pattern
1 text7 1 1 tide soap tide
2 text8 1 1 tide soap tide
3 text9 1 1 tide detergent tide
4 text11 1 1 tide tide
5 text12 1 1 tide detergent tide
6 text13 3 3 detergent tide brand tide
Run Code Online (Sandbox Code Playgroud)
这是你想要的吗?
library(stringr)
str_extract(temp, "(tide [:alnum:]*)|([:alnum:]* tide)")
Run Code Online (Sandbox Code Playgroud)
"tide"它基本上是说提取后面跟着空格的字符串,然后是任意长度的字母和数字 ( ) 的组合( ) 或 ( ) ,反之亦然 ( ) 。[:alnum:]*|[:alnum:]* tide
顺便说一句:如果你愿意,之后你可以删除NAs
x <- str_extract(temp, "(tide [:alnum:]*)|([:alnum:]* tide)")
x[!is.na(x)]
Run Code Online (Sandbox Code Playgroud)