gpt4 book ai didi

java - 如何区分可搜索的 pdf 和不可搜索的 pdf?

转载 作者:行者123 更新时间:2023-11-30 08:04:43 25 4
gpt4 key购买 nike

我有一堆pdf文件,有些是可搜索的常规pdf文件,有些是某些不可搜索的文档的扫描版本。我想提取每个pdf的内容。为了提取常规 pdf 的内容,我使用 Apache Tika并从我正在使用的不可搜索的内容中提取内容 tesseract-ocr 。但是我需要区分哪个pdf是普通pdf,哪个不是。有什么办法可以做到吗?

最佳答案

这会对你有帮助,

public static boolean isSearchablePdf(String filePath) throws Exception {

String parsedText;
PDFTextStripper pdfStripper = null;
PDDocument document = null;
COSDocument cosDoc = null;
File file = new File(filePath);
boolean isSearchable = true;

PDFParser parser = new PDFParser(new RandomAccessFile(file, "r"));
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper();
document = new PDDocument(cosDoc);
int noOfPages = document.getNumberOfPages();

for (int page = 1; page <= noOfPages; page++) {

pdfStripper.setStartPage(page);
pdfStripper.setEndPage(page);

parsedText = pdfStripper.getText(document);
isSearchable = isSearchable & isSearchablePDFContent(parsedText, page);

if (!isSearchable) {
break;
}
if (page >= 5) {
break;
}

}
if (isSearchable && noOfPages > 10) {
int min = 5;
int max = noOfPages;
for (int i = 0; i < 4; i++) {
int randomNo = min + (int) (Math.random() * ((max - min) + 1));
pdfStripper.setStartPage(randomNo);
pdfStripper.setEndPage(randomNo);
parsedText = pdfStripper.getText(document);
isSearchable = isSearchable & isSearchablePDFContent(parsedText, randomNo);
if (!isSearchable)
break;
}
}
if (isSearchable && noOfPages >= 10) {
for (int page = noOfPages - 5; page < noOfPages; page++) {
pdfStripper.setStartPage(page);
pdfStripper.setEndPage(page);
parsedText = pdfStripper.getText(document);
isSearchable = isSearchable & isSearchablePDFContent(parsedText, page);
if (!isSearchable)
break;

}
}

if (document != null){
document.close();
}

return isSearchable;
}

public static boolean isSearchablePDFContent(String contentOfPdf, int pageNo) throws IOException {
int count = 0;
boolean isSearchable = false;
if (!contentOfPdf.isEmpty()) {
StringTokenizer st = new StringTokenizer(contentOfPdf);
while (st.hasMoreTokens()) {
st.nextToken();
if (count >= 3) {
isSearchable = true;
break;
}
count++;
}

} else {
isSearchable = false;
}

return isSearchable;
}

关于java - 如何区分可搜索的 pdf 和不可搜索的 pdf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31299514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com