r语言 - str_extract_all中"subscript out of bounds"错误



我正在尝试使用str_extract_all从多个文本文件中提取日期信息。如果我执行一个文件,则可以正常工作。但是,当我将其放入循环时,它给了我这个错误。

我已经尝试过"随时",它不起作用,并且其他基本时间提取工具均行不通。

这是给我麻烦的代码的一部分:

file.names <- list.files(path = "C:/Users/jwils/Documents/R/win-library/3.6/CNN_files/AC360",  pattern = "txt$")
for(i in 1:length(file.names)){
named <- read.table(file.names[i], header=FALSE, sep="", fill = TRUE)
renamed <- corpus(file.names[i])
date <- str_extract_all(texts(renamed)
                        , "(\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Nov(?:ember)?|Oct(?:ober)?|Dec(?:ember)?) (?:19[7-9]\d|2\d{3})(?=\D|$))|(\b(?:JAN(?:UARY)?|FEB(?:RUARY)?|MAR(?:CH)?|APR(?:IL)?|MAY|JUN(?:E)?|JUL(?:Y)?|AUG(?:UST)?|SEP(?:TEMBER)?|NOV(?:EMBER)?|OCT(?:OBER)?|DEC(?:EMBER)?) (?:19[7-9]\d|2\d{3})(?=\D|$))|((Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2},\s+\d{4})|(\b(JAN(UARY)?|FEB(RUARY)?|MAR(CH)?|APR(IL)?|MAY|JUN(E)?|JUL(Y)?|AUG(UST)?|SEP(TEMBER)?|OCT(OBER)?|NOV(EMBER)?|DEC(EMBER)?)\s+\d{1,2},\s+\d{4})"
                        , simplify = TRUE)[,1]
}

我希望此代码从看起来像

的一系列文本文件中删除日期

"日期于2018年12月12日在文本来自成绩单的一堆文字"

我得到的是错误消息,"订阅范围"。我不知道这是什么意思。正如我所说,它可以在一个文件上工作,但在循环中不起作用。感谢您的所有帮助。

它与您没有通过[, 1]索引操作所期望的结果有关。如果其中一个文件不包含匹配项,则使用循环,它将返回无法以这种方式索引的空标量。

这是一种更简单的方法:使用 readText 输入文件。

library("quanteda")
library("stringr")
corp <- readtext::readtext("C:/Users/jwils/Documents/R/win-library/3.6/CNN_files/AC360/*.txt") %>%
    corpus()
docvars(corp, "date") <- 
    str_extract_all(texts(corp),
                    "(\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Nov(?:ember)?|Oct(?:ober)?|Dec(?:ember)?) (?:19[7-9]\d|2\d{3})(?=\D|$))|(\b(?:JAN(?:UARY)?|FEB(?:RUARY)?|MAR(?:CH)?|APR(?:IL)?|MAY|JUN(?:E)?|JUL(?:Y)?|AUG(?:UST)?|SEP(?:TEMBER)?|NOV(?:EMBER)?|OCT(?:OBER)?|DEC(?:EMBER)?) (?:19[7-9]\d|2\d{3})(?=\D|$))|((Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2},\s+\d{4})|(\b(JAN(UARY)?|FEB(RUARY)?|MAR(CH)?|APR(IL)?|MAY|JUN(E)?|JUL(Y)?|AUG(UST)?|SEP(TEMBER)?|OCT(OBER)?|NOV(EMBER)?|DEC(EMBER)?)\s+\d{1,2},\s+\d{4})"
                    simplify = TRUE)[, 1]
# to verify
summary(corp)

这将日期分配给您的语料库作为新文档变量。如果您喜欢的话,也可以将它们分配给向量(例如date(。

我没有您的任何原始文件,因此不能保证它会起作用,但是只要您在文本文件中有日期,并且readtext()调用会找到它们,它应该可以工作。

相关内容

最新更新