我要分析的是一个由多个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
矩阵仍然为空。这使我认为循环仅分析文本的第一行,然后完成,但是我不确定为什么。对于为什么会如此的任何帮助将不胜感激。
答案 0 :(得分:3)
循环启动应为for (i in 1:nrow(all_df))
,而不是for (i in nrow(all_df))
。
然后您将对所有行运行它,而不仅仅是最后一行。