Meningkatkan ekstraksi teks dari PDF multi-kolom

Tata letak multi-kolom sering memerlukan pemrosesan tambahan untuk meningkatkan urutan baca dan kualitas ekstraksi.

Mengekstrak teks setelah mengurangi ukuran Font

Teknik ini memperbarui ukuran Font fragmen teks, menyimpan dokumen yang disesuaikan ke memori, dan kemudian mengekstrak teks dari hasil yang telah diubah.

  1. Buka PDF sumber dalam sebuah instans Document.
  2. Buat sebuah TextFragmentAbsorber dan kunjungi semua halaman dokumen untuk mengumpulkan objek TextFragment.
  3. Iterasikan melalui fragmen dan kurangi ukuran font masing-masing dengan rasio yang diminta sehingga tata letak kolom padat dapat dinormalisasi sebelum ekstraksi.
  4. Simpan yang disesuaikan Document ke aliran byte dalam memori.
  5. Buka kembali kedua Document dari buffer memori itu.
  6. Buat sebuah TextAbsorber, kunjungi semua halaman dokumen yang telah diubah, dan tulis teks yang diekstraksi ke file output.
public static void extractTextReduceFont(Path inputFile, Path outputFile, double reduceRatio) throws Exception {
    try (Document document = new Document(inputFile.toString())) {
        TextFragmentAbsorber fragmentAbsorber = new TextFragmentAbsorber();
        document.getPages().accept(fragmentAbsorber);
        for (TextFragment fragment : fragmentAbsorber.getTextFragments()) {
            fragment.getTextState().setFontSize((float) (fragment.getTextState().getFontSize() * reduceRatio));
        }

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        document.save(stream);
        try (Document document2 = new Document(new ByteArrayInputStream(stream.toByteArray()))) {
            TextAbsorber textAbsorber = new TextAbsorber();
            document2.getPages().accept(textAbsorber);
            Files.writeString(outputFile, textAbsorber.getText());
        }
    }
}

Mengekstrak teks dengan faktor skala

Gunakan TextExtractionOptions dalam mode pemformatan murni dan sesuaikan faktor skala untuk tata letak yang banyak kolom.

  1. Buka PDF sumber dalam sebuah instans Document.
  2. Buat sebuah TextAbsorber untuk ekstraksi seluruh dokumen.
  3. Buat TextExtractionOptions dalam mode pemformatan murni sehingga perilaku ekstraksi sensitif tata letak digunakan.
  4. Setel faktor skala dan terapkan opsi ekstraksi ke absorber sebelum mengunjungi halaman.
  5. Kunjungi semua halaman dokumen dan tulis teks yang diekstrak ke file output.
public static void extractTextScaleFactor(Path inputFile, Path outputFile, double scaleFactor) throws Exception {
    try (Document document = new Document(inputFile.toString())) {
        TextAbsorber textAbsorber = new TextAbsorber();
        TextExtractionOptions extractionOptions =
                new TextExtractionOptions(TextExtractionOptions.TextFormattingMode.Pure);
        extractionOptions.setScaleFactor(scaleFactor);
        textAbsorber.setExtractionOptions(extractionOptions);
        document.getPages().accept(textAbsorber);
        Files.writeString(outputFile, textAbsorber.getText());
    }
}