У меня есть текстовые документы (тысячи) во фрейме данных (doc_id и описание событий) и список с сотнями фрагментов текста, которые мне нужно сопоставить с текстовым полем во фрейме данных.Мне нужно создать новые столбцы во фрейме данных для каждого из выражений в списке после сопоставления выражений в каждом из документов.
Вот представление моих данных
doc_id <- c("doc1","doc2","doc3","doc4","doc5","doc6","doc7")
event_desc <- c("yesterday I ate meat", "yesterday I ate tuna", "yesterday I ate chicken", "yesterday I ate tuna", "yesterday I ate meat", "yesterday I ate tuna", "yesterday I ate chicken")
mydata <- data.frame(doc_id,event_desc)
список будет
reg.ex.list <- list("pattern1" = "ate meat", "pattern2" = "ate tuna", "pattern3" = "ate chicken")
На индивидуальном уровне (для создания 1 столбца за раз) я использовалрегулярные выражения (библиотека stringr) для поиска совпадений и последующего создания столбца.
pattern1 <- "ate meat" ##regular expression
mydata$pattern1 <- str_extract_all(mydata$event_desc, pattern1)
##matching and extraction
mydata$pattern1 <- as.character(mydata$pattern1)
pattern1 <- strsplit(mydata$pattern1, split = ",")
pattern1 <- data.frame(ID = rep(mydata$doc_id, sapply(pattern1,
length)), pattern1 = unlist(pattern1))
Конечно, это не может быть расширено для сотен фрагментов текста, поэтому (безуспешно) я попробовал цикл ниже, чтобы сделать 2 вещи:
- создайте столбцы (и покажите, какие документы соответствуют моему регулярному выражению)
создайте столбцы, используя мое регулярное выражение в качестве имени столбца
для (i в reg.ex.list) {nam <- вставить (mydata, i, sep = "_") назначить (nam, str_extract_all (mydata $ event_desc, i))} </p>
Подход с использованием регулярных выражений может выглядеть странно, но мне нужно отслеживать, какие выражения соответствуют тем, с какими документами в дальнейшем можно получить больше данных, используя регулярное выражение в качестве ключа.
Ожидаемый результат - это кадр данных со всеми моими документами.и рядом с ними столбцы для каждого регулярного выражения.