首页 > 解决方案 > for循环没有遍历每一行

问题描述

我有一个包含多个 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矩阵仍然是空的。这让我觉得循环只是分析第一行文本然后完成,但我不知道为什么。任何关于为什么会这样的帮助将不胜感激。

标签: rloopsfor-loopnlp

解决方案


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

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


推荐阅读