用 R 中指定单词旁边的单词过滤所有行

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)

有什么帮助吗?

jaz*_*rro 5

如果您使用 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)


Geo*_*ery 2

这是你想要的吗?

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)