diff --git a/images/page_djvu_1.tiff b/images/page_djvu_1.tiff new file mode 100644 index 0000000..1fab802 --- /dev/null +++ b/images/page_djvu_1.tiff Binary files differ diff --git a/images/page_djvu_2.tiff b/images/page_djvu_2.tiff new file mode 100644 index 0000000..dbb2781 --- /dev/null +++ b/images/page_djvu_2.tiff Binary files differ diff --git a/images/page_djvu_3.tiff b/images/page_djvu_3.tiff new file mode 100644 index 0000000..f9e0368 --- /dev/null +++ b/images/page_djvu_3.tiff Binary files differ diff --git a/images/page_djvu_4.tiff b/images/page_djvu_4.tiff new file mode 100644 index 0000000..20f01df --- /dev/null +++ b/images/page_djvu_4.tiff Binary files differ diff --git a/images/page_djvu_5.tiff b/images/page_djvu_5.tiff new file mode 100644 index 0000000..5c9a2fb --- /dev/null +++ b/images/page_djvu_5.tiff Binary files differ diff --git a/images/page_djvu_6.tiff b/images/page_djvu_6.tiff new file mode 100644 index 0000000..d8968dc --- /dev/null +++ b/images/page_djvu_6.tiff Binary files differ diff --git a/src/main/java/ru/mcs/udk/UDKSearcher.java b/src/main/java/ru/mcs/udk/UDKSearcher.java index 4712d69..c4586e9 100644 --- a/src/main/java/ru/mcs/udk/UDKSearcher.java +++ b/src/main/java/ru/mcs/udk/UDKSearcher.java @@ -67,7 +67,6 @@ } // проходимся по всем найденным файлам и ищем УДК -// findUdk(outputFile); findUdk(outputFile, foundFiles.size()); } catch (ParseException e) { System.out.println("Ошибка при разборе аргументов: " + e.getMessage()); diff --git a/src/main/java/ru/mcs/udk/scanner/impl/DJVUScanner.java b/src/main/java/ru/mcs/udk/scanner/impl/DJVUScanner.java index 2d96c4c..2f37e4d 100644 --- a/src/main/java/ru/mcs/udk/scanner/impl/DJVUScanner.java +++ b/src/main/java/ru/mcs/udk/scanner/impl/DJVUScanner.java @@ -22,7 +22,6 @@ documentInfo.setError(""); documentInfo.setUdk(""); documentInfo.setDocumentFormat(DocumentFormat.DJVU); -// for (int pageIndex = 1; pageIndex < 7; pageIndex++) { String outputFile = "page_djvu_%d.tiff"; Process process; try { @@ -36,7 +35,7 @@ int exitCode = process.waitFor(); if (exitCode == 0) { for (int index = 1; index <= 6; index++) { - BufferedImage image = ImageIO.read(new File(String.format("page_djvu_%s.tiff", index))); + BufferedImage image = ImageIO.read(new File(String.format("images/page_djvu_%s.tiff", index))); String text = DocumentUtils.getText(image); String udk = findUDK(text); if (udk != null && !udk.isEmpty()) { diff --git a/src/main/java/ru/mcs/udk/scanner/impl/PDFScanner.java b/src/main/java/ru/mcs/udk/scanner/impl/PDFScanner.java index 9f0e248..af54cb5 100644 --- a/src/main/java/ru/mcs/udk/scanner/impl/PDFScanner.java +++ b/src/main/java/ru/mcs/udk/scanner/impl/PDFScanner.java @@ -5,6 +5,7 @@ import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.text.PDFTextStripper; +import ru.mcs.udk.factory.DocumentScannerFactory; import ru.mcs.udk.wrapper.DocumentFormat; import ru.mcs.udk.wrapper.DocumentInfo; import ru.mcs.udk.scanner.DocumentScanner; @@ -20,6 +21,15 @@ public class PDFScanner implements DocumentScanner { + public static void main(String[] args) { + File file = new File("d:\\downloads\\Библиотека программиста\\Теория, Проектирование, Качество кода, Паттерны, UML\\Атчисон -- Масштабирование приложений. Выращивание сложных систем -- 2018.pdf"); + // Получаем нужную реализацию сканера + PDFScanner scanner = new PDFScanner(); + // Ищем УДК номер + DocumentInfo documentInfo = scanner.getUDK(file); + System.out.println(documentInfo.getUdk()); + } + @Override public DocumentInfo getUDK(File file) { // Засекаем время начала поиска @@ -31,9 +41,9 @@ documentInfo.setFileSize(getSizeFile(file)); try (PDDocument document = Loader.loadPDF(file)) { PDFTextStripper stripper = new PDFTextStripper(); - // Устанавливаем диапазон страниц для анализа (первые три страницы) + // Устанавливаем диапазон страниц для анализа (первые семь страниц) stripper.setStartPage(1); - stripper.setEndPage(Math.min(3, document.getNumberOfPages())); + stripper.setEndPage(Math.min(6, document.getNumberOfPages())); String text = stripper.getText(document); documentInfo.setUdk(findUDK(text)); @@ -61,7 +71,7 @@ PDFRenderer renderer = new PDFRenderer(document); for (int pageIndex = 0; pageIndex < 6; pageIndex++) { - BufferedImage image = renderer.renderImageWithDPI(pageIndex, 300); + BufferedImage image = renderer.renderImageWithDPI(pageIndex, 100); String text = DocumentUtils.getText(image); String udk = findUDK(text); if (udk != null) { diff --git a/src/main/java/ru/mcs/udk/utils/DocumentUtils.java b/src/main/java/ru/mcs/udk/utils/DocumentUtils.java index fdf4fea..39078ec 100644 --- a/src/main/java/ru/mcs/udk/utils/DocumentUtils.java +++ b/src/main/java/ru/mcs/udk/utils/DocumentUtils.java @@ -9,17 +9,18 @@ import java.util.regex.Pattern; public class DocumentUtils { - private static volatile Tesseract instance; + private static volatile Tesseract tesseract; - public static Tesseract getInstance() { - Tesseract localInstance = instance; + public static Tesseract getTesseract() { + Tesseract localInstance = tesseract; if (localInstance == null) { synchronized (Tesseract.class) { - localInstance = instance; + localInstance = tesseract; if (localInstance == null) { - instance = localInstance = new Tesseract(); - instance.setDatapath("program\\tesseract\\tessdata\\");; - instance.setLanguage("rus"); + tesseract = localInstance = new Tesseract(); + tesseract.setDatapath("program\\tesseract\\tessdata\\"); + tesseract.setLanguage("rus"); + tesseract.setVariable("user_defined_dpi", "300"); } } } @@ -27,7 +28,7 @@ } public static void main(String[] args) { - Tesseract tesseract = getInstance(); + Tesseract tesseract = getTesseract(); try { String text = tesseract.doOCR(new File("book3.PNG")); @@ -40,14 +41,7 @@ } public static String getText(BufferedImage image) throws TesseractException { - Tesseract tesseract = new Tesseract(); - tesseract.setDatapath("d:\\program\\Tesseract-OCR\\tessdata\\"); - tesseract.setLanguage("rus"); - tesseract.setVariable("user_defined_dpi", "300"); - // Настройки для маленьких изображений - // tesseract.setPageSegMode(7); // PSM_SINGLE_LINE (распознавание одной строки) - // tesseract.setVariable("tessedit_min_characters", "1"); // Минимальное количество символов - + Tesseract tesseract = getTesseract(); return tesseract.doOCR(image); }