Цикл над коллекцией текста для извлечения подразделов - PullRequest
0 голосов
/ 15 мая 2019

В качестве продолжения моего примера здесь я столкнулся с проблемой, заключающейся в том, что я хочу извлечь подглавы для всех документов в моей коллекции документов в R для дальнейшего Text Mining.Это мои примеры данных :

doc_title <- c("Example.docx", "AnotherExample.docx")
text <- c("One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin.
      1 Introduction
      He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections. 
      1.1 Futher
      The bedding was hardly able to cover it and seemed ready to slide off any moment.", "2.2 Futher Fuhter
      'What's happened to me?' he thought. It wasn't a dream. His room, a proper human room although a little too small, lay peacefully between its four familiar walls.")

doc_corpus <- data.frame(doc_title, text)

Это функция для разделения текста на подразделы:

divideInto_subchapters <- function(doc_corpus){

  corpus_text <- doc_corpus$text

  # Replace lines starting with N.N.N+ with space
  corpus_text <- gsub("\\R\\d+(?:\\.\\d+){2,}\\s+[A-Z].*\\R?", " ", corpus_text, perl=TRUE)

  # Split into IDs and Texts
  data <- str_match_all(corpus_text, "(?sm)^(\\d+(?:\\.\\d+)?\\s+[A-Z][^\r\n]*)\\R(.*?)(?=\\R\\d+(?:\\.\\d+)?\\s+[A-Z]|\\z)")

  # Get the chapter ID column
  chapter_id <- trimws(data[[1]][,2])

  # Get the text ID column
  text <- trimws(data[[1]][,3])

  # Create the target DF
  corpus <- data.frame(doc_title, chapter_id, text)

  return(corpus)
}

Теперь я хочу перебрать все элементы вmy doc_corpus и разделить весь простой текст на подразделы.Это то, что я попробовал до сих пор:

subchapter_corpus <- data.frame()

for (i in 1:nrow(doc_corpus)) {
  temp_corpus <- divideInto_subchapters(doc_corpus[i])
  subchapter_corpus <- rbind(subchapter_corpus, temp_corpus)
}

К сожалению, это возвращает пустой фрейм данных.Что я тут не так делаю?Любая помощь высоко ценится.Мой ожидаемый вывод для первой строки df выглядит так:

doc_title <- c("Example.docx")
chapter_id <- (c("1 Introduction")) 
text <- (c("He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections.""))

chapter_one_df <- data.frame(doc_title, chapter_id, text)

1 Ответ

1 голос
/ 15 мая 2019

Итак, для меня цикл давал мне «индекс за пределами границ», пока я не изменил doc_corpus[i] на doc_corpus[i, ]. С этим изменением я получаю одну строку в результирующем фрейме данных.

Тем не менее, это всего лишь chapter_id "2.2 Далее Фухтер". Кажется, отсутствует "1.1 Futher."

Если речь идет о регулярном выражении, тогда, черт возьми, будет полезно, если вы прокомментируете, что вы делаете с ним! :)

Не стесняйтесь комментировать, и я буду исправлять свой ответ по мере необходимости, пока он не будет полезен. Не уверен, что так оно и есть, но это только мой третий день ответов на вопросы по SO.

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