for循环不会遍历每一行

时间:2019-06-27 08:33:49

标签: r loops for-loop nlp

我要分析的是一个由多个MS Word文件组成的文本语料库。由于语料库很大(大约10,000行),而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 个答案:

答案 0 :(得分:3)

循环启动应为for (i in 1:nrow(all_df)),而不是for (i in nrow(all_df))

然后您将对所有行运行它,而不仅仅是最后一行。