цикл не повторяется в каждой строке - PullRequest
0 голосов
/ 27 июня 2019

У меня есть набор текста, состоящий из нескольких файлов MS Word, который я хотел бы проанализировать.Поскольку корпус большой (~ 10000 строк) и анализ nlp (с использованием пакета cleanNLP) занимает много времени и часто дает сбой, я подумал, что мог бы циклически проходить по тексту и анализировать каждый по отдельности.

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

#read in text corpus
all <- read_dir("N:/data/All")

#convert into dataframe usable by text packages
all_df <- tibble(line = 1:nrow(all), text = all$content)

#loop through every line for location extraction
#create unpopulated matrix
text_mat <- matrix(NA, nrow = nrow(all_df), ncol = 3)

#loop through each line, fill matrix with location output
for (i in nrow(all_df)) {
  line <- all_df[i, ]
  obj_line <- cnlp_annotate(line, as_strings = TRUE)
  loc <- cnlp_get_entity(obj_line) %>%
    filter(entity_type == "CITY" | entity_type == "LOCATION") %>%
    group_by(entity) %>%
    tally() %>%
    arrange(desc(n)) %>%
    rename("Count" = "n")
  text_mat[i, ] <- c(i, loc$entity, loc$Count)
  next 
}

#convert matrix to data frame
entity_df <- as.data.frame(text_mat)  

Когда я запускаю цикл, он завершается очень быстро - я ожидаю, что это займет не менее нескольких минут, а матрица text_mat останется пустой.Это заставляет меня думать, что цикл анализирует только первую строку текста и затем завершается, но я не уверен, почему.Любая помощь в том, почему это так, будет принята с благодарностью.

1 Ответ

3 голосов
/ 27 июня 2019

Инициирование цикла должно быть for (i in 1:nrow(all_df)), а не for (i in nrow(all_df)).

Тогда вы запустите его для всех строк, а не только для последней.

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