【发布时间】:2018-03-06 00:05:43
【问题描述】:
我正在尝试从我从 OCR 格式的 pdf 文件中提取的文本中搜索一个单词。这个 pdf 文件有多个页面,所以对于每一页,我都在搜索那个词,如果找到那个词,那么写下 filename、status(存在或不存在) ,Page 找到它以及它找到了哪些 words 到数据框。但是数据框为所有文件提供“当前”状态,我只想这样
file_name Status Page words
test1.pdf "Present" test1_2,test1_4 gym,school
test2.pdf "Not Present" - -
test3.pdf "Present" test3_1 gym
我在这段代码中遗漏了什么。
这里是代码
All_files=Sys.glob("*.pdf")
v1 <- numeric(length(All_files))
chk_words=c("Swimming pool","Gym","west","para")
word <- "Gym"
tc=c()
ps=c()
x=list()
df <- data.frame()
Status="Present"
for (i in seq_along(All_files)){
file_name <- All_files[i]
cnt <- pdf_info(All_files[i])$pages
print(cnt)
for(j in seq_len(cnt)){
img_file <- pdftools::pdf_convert(All_files[i], format = 'tiff', pages = j, dpi = 400)
text <- ocr(img_file)
ocr_text <- capture.output(cat(text))
check <- sapply(ocr_text, paste, collapse="")
junk <- dir(path="D:/Deepesh/R Script/All_PDF_Files/Registration_Certificates_OCR", pattern="tiff")
file.remove(junk)
br <-if(length(which(stri_detect_fixed(tolower(check),tolower(word)))) <= 0) "Not Present"
else "Present"
print(br)
if(br=="Present") {
v1[i] <- j
break}
for(k in chk_words){
br=if(length(which(stri_detect_fixed(tolower(check),tolower(k)))) <= 0){ print("Not Present") } else {print("Present")}
if(br == "Present")
ps=k
x[[k]]=ps
tc=unlist(unique(x))
}
}
print(tc)
Status <- if(v1[i] == 0) "Not Present" else "Present"
pages <- if(v1[i] == 0) "-" else
paste0(tools::file_path_sans_ext(basename(file_name)), "_", v1[i])
words <- if(v1[i] == 0) "-" else word
df <- rbind(df, cbind(file_name = basename(file_name),
Status, pages = pages, words = words,tc))
}
任何建议都是可以理解的。
谢谢
【问题讨论】:
-
看起来你是
rbind仅当br == "Present"时 -
是的,我只是想看看我是否至少能够放置那些状态为存在的记录。但对于每个页面和每个文件,它的状态都显示为“存在”
-
你有一个嵌套循环。假设如果其中一页有“Present”,那么整个文档(即 pdf 文件)是否应该显示“Present”。在这种情况下,您可能需要提取“br”并使用
all或any在内循环外部检查 -
是的,我希望如果文档的任何页面有“存在”,那么文档状态应该更新为“存在”否则“不存在”
-
所以,在这种情况下,试试这个建议。我无法检查,因为这不是可重现的示例
标签: r for-loop if-statement dataframe break