Extracción basada en regiones usando Python
Extraer texto de una región específica de una página
Usar TextAbsorber junto con un Rectángulo para limitar la extracción a un área específica de una página. Este enfoque es útil para la extracción por zonas de encabezados, pies de página, celdas de tabla, campos de formulario, facturas u otras regiones de diseño fijo donde la posición del texto se conoce de antemano.
- Abra el PDF de origen como un Documento.
- Crear un
TextAbsorberinstancia. - Configurar
text_search_optionspara limitar la extracción a un rectángulo. - Acepta el absorber en la página objetivo.
- Escribe el texto extraído en un archivo de salida.
import aspose.pdf as ap
def extract_text_from_region(infile, page_number, rect_coords, outfile):
"""
Extract text from a specified rectangular region on a given page.
Args:
infile (str): Path to input PDF file.
page_number (int): 1-based index of the page.
rect_coords (tuple): (llx, lly, urx, ury) coordinates of the rectangle.
outfile (str): Output text file path.
"""
document = ap.Document(infile)
try:
absorber = ap.text.TextAbsorber()
# Set options to restrict search to the rectangle
absorber.text_search_options.limit_to_page_bounds = True
llx, lly, urx, ury = rect_coords
absorber.text_search_options.rectangle = ap.Rectangle(llx, lly, urx, ury, True)
# Accept on the specific page
document.pages[page_number].accept(absorber)
extracted_text = absorber.text
with open(outfile, "w", encoding="utf-8") as tw:
tw.write(extracted_text)
finally:
document.close()
Extraer párrafos iterando a través de ellos
Usar ParagraphAbsorber cuando necesitas extracción consciente de párrafos en lugar de texto plano de página. A diferencia de TextAbsorber o TextFragmentAbsorber, esta API organiza la salida por página, sección y párrafo, lo que es útil para el análisis de texto, la exportación estructurada y el procesamiento sensible al diseño.
- Abra el PDF de origen como un Documento.
- Crear un
ParagraphAbsorberinstancia. - Llamar
absorber.visit(document)para analizar todas las páginas. - Iterar a través de
page_markups, luego a través de cada sección y párrafo. - Leer los fragmentos de texto de cada párrafo y escribir el resultado en un archivo.
import aspose.pdf as ap
def extract_paragraphs_from_pdf(infile, outfile):
"""
Extract all paragraphs from a PDF document, and write each paragraph’s text into an output file.
Args:
infile (str): Path to input PDF file.
outfile (str): Path to output text file.
"""
document = ap.Document(infile)
try:
absorber = ap.text.ParagraphAbsorber()
absorber.visit(document)
with open(outfile, "w", encoding="utf-8") as tw:
for page_markup in absorber.page_markups:
for sec_idx, section in enumerate(page_markup.sections, start=1):
for para_idx, paragraph in enumerate(section.paragraphs, start=1):
# Concatenate all fragments/lines in the paragraph
parts = []
for line in paragraph.lines:
for fragment in line:
parts.append(fragment.text)
parts.append("\r\n")
paragraph_text = "".join(parts)
tw.write(
f"Page {page_markup.number}, Section {sec_idx}, Paragraph {para_idx}:\n"
)
tw.write(paragraph_text + "\n")
finally:
document.close()
Extraer párrafos con renderizado de polígono delimitador
También puede usar ParagraphAbsorber para inspeccionar la geometría de los párrafos. Además de extraer texto, este enfoque registra el rectángulo de cada sección y el polígono del párrafo, lo cual es útil para el mapeo de diseño, el análisis de documentos, herramientas de accesibilidad o el post-procesamiento dependiente de regiones.
- Abra el PDF de origen como un Documento.
- Crear un
ParagraphAbsorberinstancia. - Visita la página objetivo.
- Leer el marcado de la página desde
absorber.page_markups. - Itera a través de secciones y párrafos para capturar la geometría y el texto.
- Escribe los datos de rectángulo, polígono y texto en el archivo de salida.
import aspose.pdf as ap
def extract_paragraphs_with_geometry(infile, outfile):
"""
Extract paragraphs and record geometry info (rectangle / polygon) for each paragraph in a PDF.
Args:
infile (str): Path to input PDF file.
outfile (str): Path to output text file.
"""
document = ap.Document(infile)
try:
absorber = ap.text.ParagraphAbsorber()
absorber.visit(document.pages[1]) # Visit page 2 (pages are 1-indexed)
page_markup = absorber.page_markups[0]
with open(outfile, "w", encoding="utf-8") as tw:
for sec_idx, section in enumerate(page_markup.sections, start=1):
tw.write(f"Section {sec_idx}: rectangle = {section.rectangle}\n")
for para_idx, paragraph in enumerate(section.paragraphs, start=1):
tw.write(f" Paragraph {para_idx}: polygon = {paragraph.points}\n")
# Concatenate paragraph text
parts = []
for line in paragraph.lines:
for fragment in line:
parts.append(fragment.text)
parts.append("\r\n")
tw.write(" Text: " + "".join(parts) + "\n\n")
finally:
document.close()