الاستخراج المستند إلى المنطقة باستخدام Python

استخراج نص من منطقة معينة من الصفحة

استخدم ممتص النص جنبا إلى جنب مع المستطيل لقصر الاستخراج على منطقة معينة من الصفحة. يُعد هذا الأسلوب مفيدًا للاستخراج المستند إلى المنطقة من الرؤوس أو التذييلات أو خلايا الجدول أو حقول النموذج أو الفواتير أو مناطق التخطيط الثابت الأخرى حيث يكون موضع النص معروفًا مسبقًا.

  1. افتح ملف PDF المصدر كملف مستند.
  2. قم بإنشاء TextAbsorber مثال.
  3. قم بالتهيئة text_search_options للحد من الاستخراج إلى مستطيل.
  4. اقبل جهاز الامتصاص على الصفحة المستهدفة.
  5. اكتب النص المستخرج إلى ملف الإخراج.
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()

استخرج الفقرات عن طريق التكرار من خلالها

استخدم ممتص الفقرة عندما تحتاج إلى الاستخراج مع مراعاة الفقرة بدلاً من نص الصفحة العادية. على عكس ممتص النص أو ممتص أجزاء النص، تقوم واجهة برمجة التطبيقات هذه بتنظيم الإخراج حسب الصفحة والقسم والفقرة، وهو أمر مفيد لتحليل النص والتصدير المنظم والمعالجة الحساسة للتخطيط.

  1. افتح ملف PDF المصدر كملف مستند.
  2. قم بإنشاء ParagraphAbsorber مثال.
  3. اتصل absorber.visit(document) لتحليل جميع الصفحات.
  4. قم بالتكرار من خلال page_markups، ثم من خلال كل قسم وفقرة.
  5. اقرأ أجزاء النص من كل فقرة واكتب النتيجة إلى ملف.
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()

استخراج الفقرات مع عرض المضلع المحيط

يمكنك أيضًا استخدام ممتص الفقرة لفحص هندسة الفقرة. بالإضافة إلى استخراج النص، يسجل هذا الأسلوب كل مستطيل مقطع ومضلع فقرة، وهو أمر مفيد لتخطيط التخطيط أو تحليل المستندات أو أدوات إمكانية الوصول أو المعالجة اللاحقة على دراية بالمنطقة.

  1. افتح ملف PDF المصدر كملف مستند.
  2. قم بإنشاء ParagraphAbsorber مثال.
  3. قم بزيارة الصفحة المستهدفة.
  4. اقرأ ترميز الصفحة من absorber.page_markups.
  5. قم بالتكرار من خلال الأقسام والفقرات لالتقاط الهندسة والنص.
  6. اكتب بيانات المستطيل والمضلع والنص إلى ملف الإخراج.
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()