【发布时间】:2020-11-26 20:02:27
【问题描述】:
我需要提取大量 PDF 文档的特定部分。 PDF 是包含各种数字、字母和其他信息的大而杂乱的报告。这些文件的长度不同,但它们之间具有统一的内容和部分。这些文档有一个目录,其中包含部分名称。例如
Table of Content:
Item 1. Business 1
Item 1A. Risk Factors 2
Item 1B. Unresolved Staff Comments 5
Item 2. Properties 10
Item N........
..........text I do not care about...........
Item 1A. Risk Factors
.....text I am interested in getting.......
(section ends)
Item 1B. Unresolved Staff Comments
..........text I do not care about...........
阅读它们并对其进行整体分析没有问题,但我只需要提取 "Item 1A. Risk Factors" 和 "Item 1B. Unresolved Staff 之间的文本评论”。 我使用了 pdftools、tm、quanteda 和 readtext 包 这是我用来读入文档的部分代码。我创建了一个放置我的 PDF 的目录并将其命名为“PDF”和另一个目录,R 将在其中放置转换为“.txt”文件的位置。
pdf_directory <- paste0(getwd(), "/PDF")
txt_directory <- paste0(getwd(), "/Texts")
然后我使用“list.files”函数创建一个文件列表。
files <- list.files(pdf_directory, pattern = ".pdf", recursive = FALSE,
full.names = TRUE)
files
之后,我继续创建一个提取文件名的函数。
extract <- function(filename) {
print(filename)
try({
text <- pdf_text(filename)
})
f <- gsub("(.*)/([^/]*).pdf", "\\2", filename)
write(text, file.path(txt_directory, paste0(f, ".txt")))
}
for (file in files) {
extract(file)
}
在这一步之后,我卡住了,不知道如何继续。我不确定在读取数据时是否应该尝试提取感兴趣的部分,因此,我想我将不得不与我创建函数的块搏斗——f <- gsub("(.*)/([^/]*).pdf", "\\2", filename)?我为这些问题道歉,但我是在自学。
我还尝试在一个文件而不是语料库上使用以下代码:
start <- grep("^\\*\\*\\* ITEM 1A. RISK FACTORS", text_df$text) + 1
stop <- grep("^ITEM 1B. UNRESOLVED STAFF COMMENTS", text_df$text) - 1
lines <- raw[start:stop]
scd <- paste0(".*",start,"(.*)","\n",stop,".*")
gsub(scd,"\\1", name_of_file)
但它对我没有任何帮助。
【问题讨论】:
-
你能分享至少一个 pdf 文件吗?可以更轻松地编写涵盖整个过程的答案。
-
是的,当然。这是公共信息 (corporate.exxonmobil.com/-/media/Global/Files/…) 非常感谢。