R-全部或部分字符串匹配?
我有一个推特数据框架,用于我正在进行的情绪分析。我想删除对一些专有名称的引用(例如,“Jeff Smith”)。有没有办法在同一命令中删除对名称的全部或部分引用?现在,我正在做一个漫长的过程:R-全部或部分字符串匹配?,r,R,我有一个推特数据框架,用于我正在进行的情绪分析。我想删除对一些专有名称的引用(例如,“Jeff Smith”)。有没有办法在同一命令中删除对名称的全部或部分引用?现在,我正在做一个漫长的过程: library(stringr) str_detect(text, c('(Jeff Smith) | (Jeff) | (Smith)' )) 但当我添加更多的名字时,这显然变得很麻烦。理想情况下,有一种方法可以只喂养“杰夫·史密斯”,然后能够匹配全部或部分内容。有人有什么想法吗 如果您想使用它,请提
library(stringr)
str_detect(text, c('(Jeff Smith) | (Jeff) | (Smith)' ))
但当我添加更多的名字时,这显然变得很麻烦。理想情况下,有一种方法可以只喂养“杰夫·史密斯”,然后能够匹配全部或部分内容。有人有什么想法吗
如果您想使用它,请提供一些示例代码:
tweets = data.frame(text = c('Smith said he’s not counting on Monday being a makeup day.',
"Williams says that Steve Austin will miss the rest of the week",
"Weird times: Jeff Smith just got thrown out attempting to steal home",
"Rest day for Austin today",
"Jeff says he expects to bat leadoff", "Jeff", "No reference to either name"))
name = c("Jeff Smith", "Steve Austin")
不是一种美,但它是有效的
#example data
namelist <- c('Jeff Smith', 'Kevin Arnold')
namelist_spreaded <- strsplit(namelist, split = ' ')
f <- function(x) {
paste0('(',
paste(x, collapse = ' '),
') | (',
paste(x, collapse = ') | ('),
')')
}
lapply(namelist_spreaded, f)
#示例数据
姓名列表根据显示的数据,所有这些都应该是正确的
library(dplyr)
library(stringr)
pat <- str_c(gsub(" ", "\\b|\\b", str_c("\\b", name, "\\b"),
fixed = TRUE), collapse="|")
tweets %>%
mutate(ind = str_detect(text, pat))
请尝试'\\bJeff\\b.*\\bSmith'
@akrun您将其放入什么命令中以查找具有该模式的所有字符串?如果您可以提供一个小的可复制文本示例和预期输出,请test@akrun我在原来的帖子里加了一些但是,这不是也会匹配像杰夫·奥斯汀(Jeff Austin)这样的东西吗?这似乎是在帕特·D·布莱恩特(pat.@D.Bryant)的名字之外拾取东西。你能试试新的模式吗?是的,仍然拾取外部模式。例如,它拾取的tweet实际上只是超链接。@D.Bryant您是否可以更新示例文本,如当前示例中所示,所有行的“name”中都有这些值我明白了原因。首先,你让你的str_检测到一个突变,而我正试图用它来过滤。一旦我改变了那一步,它就成功了。至于它对单个单词不起作用,我意识到我的工作流程正在改变,将tweet拆分为单词,并使用“to_lower”。你的命令区分大小写,但我所有的字都是小写的。将名称更改为lowers,它可以工作。所以你的解决方案就是赢家!非常感谢你今天的帮助!给你一颗金星!
# text ind
#1 Smith said he’s not counting on Monday being a makeup day. TRUE
#2 Williams says that Steve Austin will miss the rest of the week TRUE
#3 Weird times: Jeff Smith just got thrown out attempting to steal home TRUE
#4 Rest day for Austin today TRUE
#5 Jeff says he expects to bat leadoff TRUE
#6 Jeff TRUE
#7 No reference to either name FALSE