首页 > 解决方案 > 如何从R中的多个文档中提取多个引号?

问题描述

我有几个 Word 文件,其中包含我想从中提取引号之间的字符串的文章。如果每篇文章有一个引用,我的代码可以正常工作,但如果我有多个,R 会提取将一个引用与下一个引用分开的句子。

以下是我文章中的文字:

一只名叫印度的孟加拉虎在美国德克萨斯州失踪,被发现没有受伤,现在被转移到休斯顿的一个动物收容所。“我们找到了他,他很健康,”休斯顿警察局 (HPD) 重犯指挥官罗恩博尔扎说。他接着说,“我喜欢老虎”。这就是结局。

随后制定了一项全球恢复计划,世界自然基金会与个人、企业、社区、政府和其他保护合作伙伴一起不懈努力,将这一大胆而雄心勃勃的保护目标变为现实。“这一目标促进了更大规模的保护行动,这是迫切需要的,”WWF-UK 老虎高级项目顾问 Becci May 说。

这是我的代码:

library(readtext)
library(stringr)

#' folder where you've saved your articles
path <- "articles"

#' reads in anything saved as .docx
mydata <-
  readtext(paste0(path, "\\*.docx")) #' make sure the Word document is saved as .docx

#' remove curly punctuation 
mydata$text <- gsub("/’&quot;, "/'", mydata$text, ignore.case = TRUE)
mydata$text <- gsub("[“”]", "\"", gsub("[‘’]", "'", mydata$text))

#' extract the quotes
stringi::stri_extract_all_regex(str = mydata$text, pattern = '(?<=").*?(?=")')

输出是:

[[1]] [1] “我们找到了他,他很健康,”
[2] “休斯顿警察局 (HPD) 重犯指挥官罗恩·博尔扎说。他接着说,” [3] “我喜欢老虎”

[[2]] [1] “目标促成了更大规模的保护行动,这是迫切需要的,”

您可以看到第一个输出的第二个元素不正确。我不想包括

” 休斯顿警察局 (HPD) 重犯指挥官罗恩·博尔扎说。他接着说,“

标签: rstringtext

解决方案


我们可以做到这一点base R

sapply(regmatches(text, gregexpr('(?<=")[^"]+)', text, perl = TRUE)), function(x) x[c(TRUE, FALSE)])

推荐阅读