我有两个数据框。一个(txt.df)有一列包含我想从(text)中提取短语的文本。另一个(wrd.df)有一个包含短语(短语)的列。两者都是具有复杂文本和字符串的大数据框,但可以说:
txt.df <- data.frame(id = c(1, 2, 3, 4, 5),
text = c("they love cats and dogs", "he is drinking juice",
"the child is having a nap on the bed", "they jump on the bed and break it",
"the cat is sleeping on the bed"))
wrd.df <- data.frame(label = c('a', 'b', 'c', 'd', 'e', 'd'),
phrase = c("love cats", "love dogs", "juice drinking", "nap on the bed", "break the bed",
"sleeping on the bed"))
我最终需要的是一个txt.df,其中包含检测到的短语标签的另一列。
我尝试的是在 wrd.df 中创建一个列,在其中我标记了这样的短语
wrd.df$token <- sapply(wrd.df$phrase, function(x) unlist(strsplit(x, split = " ")))
然后尝试编写一个自定义函数以使用 grepl/str_detect 对令牌列进行 sapply 获取所有正确的名称(标签)
Extract.Fun <- function(text, df, label, token){
for (i in token) {
truefalse[i] <- sapply(token[i], function (x) grepl(x, text))
truenames[i] <- names(which(truefalse[i] == T))
removedup[i] <- unique(truenames[i])
return(removedup)
}
然后在我的 txt.df$text 上应用这个自定义函数,以获得一个带有标签的新列。
txt.df$extract <- sapply(txt.df$text, function (x) Extract.Fun(x, wrd.df, "label", "token"))
但我不擅长自定义功能,而且我真的被卡住了。我将不胜感激任何帮助。PS如果我也能有部分匹配,比如“喝果汁”和“打破床”,那将是非常好的……但这不是优先事项……与原来的匹配。