首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >str_extract_all中出现“下标越界”错误

str_extract_all中出现“下标越界”错误
EN

Stack Overflow用户
提问于 2019-07-09 11:44:26
回答 1查看 200关注 0票数 0

我正在尝试使用str_extract_all从多个文本文件中提取日期信息。如果我做一个单独的文件,它工作得很好。但是,当我把它放到for循环中时,它给出了这个错误。

我已经尝试了“任何时间”,但它不起作用,其他任何基本的时间提取工具都不起作用。

下面是代码中给我带来麻烦的部分:

代码语言:javascript
复制
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日在Text上播出一组文字记录”

我得到的是一条错误消息,“下标越界”。我不知道这是什么意思。正如我所说的,它在单个文件上工作,但不是在循环中。感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-07-10 23:02:22

这与您没有通过[, 1]索引操作获得预期的结果有关。如果其中一个文件不包含匹配项,那么对于循环,它将返回一个空标量,该标量无法以这种方式进行索引。

这里有一种更简单的方法:使用readtext输入文件。

代码语言:javascript
复制
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()调用找到他们,它应该可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56945046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档