Цикл регулярных выражений, который создает переменные в кадре данных - PullRequest
0 голосов
/ 07 мая 2019

У меня есть текстовые документы (тысячи) во фрейме данных (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 вещи:

  1. создайте столбцы (и покажите, какие документы соответствуют моему регулярному выражению)
  2. создайте столбцы, используя мое регулярное выражение в качестве имени столбца

    для (i в reg.ex.list) {nam <- вставить (mydata, i, sep = "_") назначить (nam, str_extract_all (mydata $ event_desc, i))} </p>

Подход с использованием регулярных выражений может выглядеть странно, но мне нужно отслеживать, какие выражения соответствуют тем, с какими документами в дальнейшем можно получить больше данных, используя регулярное выражение в качестве ключа.

Ожидаемый результат - это кадр данных со всеми моими документами.и рядом с ними столбцы для каждого регулярного выражения.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...