اکثر استخراج‌کننده‌های PDF از API اشتباه استفاده می‌کنند

اکثر ابزارهای PDF از منبع داده اشتباه استفاده می‌کنند.

وقتی توسعه‌دهندگان از استخراج PDF صحبت می‌کنند، معمولاً منظورشان getTextContent() است. این متد، آیتم‌های متنی و موقعیت آن‌ها را ارائه می‌دهد. این روش، پیش‌فرض تقریباً تمام ابزارهای سمت مرورگر است.

اما getTextContent() یک نمای پردازش‌شده است. این یک نسخه ساده‌شده از چیزی است که در واقع در دسترس است.

در PDF.js سه سطح داده وجود دارد:

getStructTree(): این متد به شما می‌گوید معنای سند چیست. این متد شامل جداول، عناوین و فرمول‌ها است. • getOperatorList(): این متد به شما می‌گوید سند چه چیزی را ترسیم می‌کند. این متد شامل خطوط، مسیرها (paths) و اشکال است. • getTextContent(): این یک نمای فیلترشده از آنچه سند ترسیم می‌کند است.

اکثر ابزارها از گزینه سوم استفاده می‌کنند. این روش برای ۸۰٪ اسناد مانند گزارش‌های ساده کار می‌کند، اما در مقالات دانشگاهی و نشریات پیچیده شکست می‌خورد.

استفاده از تنها getTextContent() چهار مشکل اصلی ایجاد می‌کند:

  • ساختار جداول را از دست می‌دهید. مجبور می‌شوید بر اساس موقعیت متن، جای سلول‌ها را حدس بزنید.
  • معادلات ریاضی از هم می‌پاشند. معادلات LaTeX اغلب به صورت بلوک‌های متنی واحد و غول‌آسا ظاهر می‌شوند.
  • خطوط ستون‌ها را از دست می‌دهید. بسیاری از طرح‌بندی‌ها از خطوط واقعی برای جدا کردن ستون‌ها استفاده می‌کنند. این خطوط در محتوای متنی وجود ندارند.
  • ترتیب خواندن اشتباه به دست می‌آید. متن اغلب به همان ترتیبی که ترسیم شده ظاهر می‌شود، نه آن‌طور که یک انسان آن را می‌خواند.

روش درست برای ساخت یک پردازشگر PDF، یک سیستم سه لایه است:

  1. ابتدا getStructTree() را بررسی کنید. اگر سند ساختار منطقی دارد، از آن برای یافتن فوری جداول و عناوین استفاده کنید.
  2. سپس getOperatorList() را بررسی کنید. از خطوط و مسیرهای صریح برای یافتن مرز ستون‌ها استفاده کنید.
  3. از getTextContent() به عنوان راهکار جایگزین (fallback) استفاده کنید. از محاسبات هندسی تنها زمانی استفاده کنید که دو لایه اول داده‌ای ارائه ندهند.

این رویکرد باعث افزایش کار نمی‌شود. لایه‌های ۱ و ۲ مانند خروج‌های سریع عمل می‌کنند. اگر سند ساختار خوبی داشته باشد، از محاسبات سخت ریاضی صرف‌نظر می‌کنید. شما تنها زمانی از استنتاج پیچیده استفاده می‌کنید که سند فاقد تگ (untagged) باشد.

این معماری هم فایل‌های ساده شرکتی و هم مقالات علمی پیچیده را مدیریت می‌کند.

منبع: https://dev.to/bonzai2carn/most-pdf-extractors-use-the-wrong-api-heres-what-we-built-instead-5dgh