我有一堆pdf文件,有些是可搜索的常规pdf文件,有些是不可搜索的文件的扫描版本。我想提取每个pdf的内容。为了提取常规PDF的内容,我使用Apache Tika,为了从不可搜索的PDF中提取内容,我使用tesseract ocr。然而,我需要区分哪个pdf是nornal pdf,哪个不是。有办法吗?
你能不能不使用Tika来提取文本和图像,一旦你知道文本很少,你就把图像输入到tesseract?根据这个答案,使用Apache Tika从PDF中提取图像至少在理论上是可能的。
如果Tika不起作用,你应该能够使用PDFbox采取同样的方法。查看如何使用Java读取PDF文件?对于常规文本提取部分,请使用pdfbox从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;
}
需要一个解决方案来转换PDF文件,其中每个页面都是图像,页面可以包含文本,表格或两者的组合到可搜索的pdf。 我使用了ABBY FineReader Online,这项工作做得非常好,但我正在寻找一个可以通过Windows Python实现的解决方案 我已经做了详细的分析,下面的链接接近我想要的,但并不准确: 扫描图像/PDF到可搜索图像/PDF 它告诉我们首先要使用Ghost脚本将其转换为图像,
我正在用python开发一个二叉查找树。但是我的检索方法并不像我希望的那样工作。只有当我想检索根节点时,它才返回正确的值,对于所有其他节点,它都不返回任何值。 下面是我的节点类的代码: 我的二叉树代码: 所以Bintree中的最后一个方法为除Root之外的所有值返回Not,但它应该返回节点的值。 填充树:
我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!
大家好,根据搜索框中的conatiner图像在这里!我只是想问当用户在搜索框中键入一个名称时,应该显示特定的字段。我把我的视图。JSP代码也在这里吗?? vuew.jsp<%@page import=“com.privery.servicebuilder.service.blobdesolocalserviceutil”%><%@taglib uri=“http://java.sun.com/po
我有一个Product类,其中包含名为(String)代码、(String)名称、(Double)价格和(Date)到期的字段,每个都有自己的getter和setter方法。我有另一个类ListProduct,它包含一个名为productList的字段List。下面是一个ListProduct类,我创建了一个方法来返回仅通过产品名称搜索的所有产品。 我需要知道的是如何使上述方法成为可重用的方法,不
我想皈依*。可搜索的PDF文件*。使用alfresco和tesseract OCR的PDF文件。 tesseract版本3.03需要编译,我需要使用源代码生成设置。有没有其他解决办法。有人能帮忙吗?