เครื่องมือดึงข้อมูล PDF ส่วนใหญ่ใช้ API ผิดตัว

เครื่องมือ PDF ส่วนใหญ่ใช้แหล่งข้อมูลที่ผิด

เมื่อนักพัฒนาพูดถึงการดึงข้อมูล PDF (PDF extraction) พวกเขามักจะหมายถึง getTextContent() ซึ่งเมธอดนี้จะให้ข้อมูลรายการข้อความและตำแหน่งของข้อความเหล่านั้น และเป็นค่าเริ่มต้นสำหรับเครื่องมือฝั่งเบราว์เซอร์เกือบทุกชนิด

แต่ getTextContent() เป็นเพียงมุมมองที่ผ่านการประมวลผลมาแล้ว มันเป็นเวอร์ชันที่ถูกทำให้เรียบง่ายขึ้นจากข้อมูลที่มีอยู่จริง

ใน PDF.js มีข้อมูลอยู่ 3 ระดับ:

getStructTree(): บอกให้คุณรู้ว่าเอกสารนั้นมีความหมายอย่างไร ประกอบด้วยตาราง หัวข้อ และสูตรต่างๆ • getOperatorList(): บอกให้คุณรู้ว่าเอกสารนั้นวาดอะไรไว้บ้าง ซึ่งรวมถึงเส้น เส้นทาง (paths) และรูปทรงต่างๆ • getTextContent(): เป็นมุมมองที่ผ่านการกรองข้อมูลจากสิ่งที่เอกสารวาดไว้

เครื่องมือส่วนใหญ่เลือกใช้ตัวเลือกที่สาม ซึ่งใช้ได้กับเอกสารประมาณ 80% เช่น รายงานทั่วไป อย่างไรก็ตาม วิธีนี้จะล้มเหลวเมื่อใช้กับบทความวิชาการและสิ่งพิมพ์ที่มีความซับซ้อน

การใช้เพียง getTextContent() ก่อให้เกิดปัญหาหลัก 4 ประการ:

  • คุณจะสูญเสียโครงสร้างตาราง คุณต้องคาดเดาตำแหน่งของเซลล์โดยอิงจากตำแหน่งของข้อความ
  • สมการคณิตศาสตร์จะผิดเพี้ยน สมการ LaTeX มักจะปรากฏเป็นบล็อกข้อความขนาดใหญ่เพียงบล็อกเดียว
  • คุณจะพลาดเส้นแบ่งคอลัมน์ เลย์เอาต์จำนวนมากใช้เส้นจริงในการแบ่งคอลัมน์ ซึ่งเส้นเหล่านี้ไม่มีอยู่ในเนื้อหาข้อความ
  • คุณจะได้ลำดับการอ่านที่ผิดพลาด ข้อความมักจะปรากฏตามลำดับที่มันถูกวาดขึ้น ไม่ใช่ตามลำดับที่มนุษย์อ่าน

วิธีที่ถูกต้องในการสร้างตัวประมวลผล PDF คือระบบแบบ 3 ระดับ (three-tier system):

  1. ตรวจสอบ getStructTree() ก่อน หากเอกสารมีโครงสร้างที่เป็นตรรกะ ให้ใช้ข้อมูลนี้เพื่อค้นหาตารางและหัวข้อได้ทันที
  2. ตรวจสอบ getOperatorList() เป็นลำดับถัดไป ใช้เส้นและเส้นทาง (paths) ที่ชัดเจนเพื่อหาขอบเขตของคอลัมน์
  3. ใช้ getTextContent() เป็นวิธีสำรอง (fallback) โดยใช้การคำนวณทางเรขาคณิตเฉพาะเมื่อสองระดับแรกไม่มีข้อมูลให้เท่านั้น

แนวทางนี้ไม่ได้เป็นการเพิ่มภาระงาน ระดับที่ 1 และ 2 ทำหน้าที่เป็นทางออกที่รวดเร็ว (fast exits) หากเอกสารมีการจัดโครงสร้างมาอย่างดี คุณก็สามารถข้ามการคำนวณที่ยุ่งยากไปได้ และจะใช้การอนุมานที่ซับซ้อนก็ต่อเมื่อเอกสารนั้นไม่มีการติดแท็ก (untagged) เท่านั้น

สถาปัตยกรรมนี้สามารถจัดการได้ทั้งไฟล์บริษัททั่วไปและบทความทางวิทยาศาสตร์ที่มีความซับซ้อน

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