У меня есть два фрейма данных. one ( txt.df ) имеет столбец с текстом, из которого я хочу извлечь фразы ( текст ). Другой ( 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 = " ")))
, а затем пытался написать настраиваемую функцию для sapply по столбцу токенов с помощью grepl / str_detect получить имена (метки) тех, которые все были истинными
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 $, чтобы иметь новый столбец с метками.
txt.df$extract <- sapply(txt.df$text, function (x) Extract.Fun(x, wrd.df, "label", "token"))
но я плохо разбираюсь в пользовательских функциях и действительно застрял. Буду признателен за любую помощь. PS Было бы очень хорошо, если бы у меня были частичные совпадения, такие как «выпить сок» и «сломать кровать» ... но это не приоритет ... отлично с оригинальными.