Я относительно новичок в R и пытаюсь извлечь некоторые строки из текста (который является столбцом в информационном кадре) и сохранить их вместе с их именами (который является еще одним столбцом моего информационного кадра) на основе следующих условий:
Упрощенный пример того, что я пытаюсь сделать, выглядит следующим образом:
textdf <- data.frame(names = letters[1:4], text = c("I'm trying to extract flowers from text",
"there are certain conditions on how to extract",
"this red rose is also nice-smelling",
"scarlet rose is also fine"))
extractdf <- data.frame(extractions = c("extract", "certain", "certain conditions",
"nice-smelling rose", "red rose"),
synonyms = c(NA, NA, NA, NA, "scarlet rose"))
Я хочу
посмотрите в столбце «извлечения» и извлеките все экземпляры.
которые появляются в «текстовом» столбце моего DF.
если для строки нет совпадений, скажем, если для "red" нет совпадений
роза ", я хочу найти синоним, который в случае" алый "
роза».
- для фраз с тем же словом «ПЕРВЫЙ», которые я хочу извлечь самое длинное
подстрока ... например, если у меня есть и "определенные" и
«определенные условия» Я хочу сохранить «определенные условия».
- экстракт "пахнущей розы" тоже?
- наконец, я хочу сохранить все извлечения в отдельном столбце в
df, или получение именованного списка тоже нормально.
Так что мне нужно это
#result
textdf <- data.frame(names = letters[1:4], text = c("I'm trying to extract flowers from text",
"there are certain conditions on how to extract",
"this red rose is also nice-smelling",
"scarlet rose is also fine"),
ex = c("extract", "certain conditions, extract", "nice-smelling rose, red rose", "scarlet rose"))
Я пробовал:
##for the first item
library(rebus)
library(stringi)
sapply(textdf$text, function(x) stri_extract_all_regex(x, or1(extractdf$extractions)))
это находит "определенные", но не "определенные условия"
##for the second and fourth item
library(stringdist)
Match_Idx = amatch(textdf$text, extractdf$extractions, method = 'lcs', maxDist = Inf)
Matches = data.frame(textdf$text, extractdf$extractions[Match_Idx])
, что приятно, потому что он извлекает как "определенные условия", так и "розу с хорошим запахом", но проблема в следующем: что если в тексте есть и "определенные условия" и "роза с хорошим запахом"? как я могу найти оба?
Понятия не имею, что делать с третьим ... Должен ли я токенизировать и текст, и извлечения, найти уникальные первые слова и затем извлечь самое длинное совпадение ???
Буду признателен за помощь в решении любого из пунктов или любую помощь в том, как получить их все в пользовательской функции, чтобы я наконец получил все то, что я извлек вместе.