เครื่องมือดึงข้อมูล PDF ส่วนใหญ่ใช้ API ผิดตัว
เครื่องมือ PDF ส่วนใหญ่ใช้แหล่งข้อมูลที่ผิด
เมื่อนักพัฒนาพูดถึงการดึงข้อมูล PDF (PDF extraction) พวกเขามักจะหมายถึง getTextContent() ซึ่งเมธอดนี้จะให้ข้อมูลรายการข้อความและตำแหน่งของข้อความเหล่านั้น และเป็นค่าเริ่มต้นสำหรับเครื่องมือฝั่งเบราว์เซอร์เกือบทุกชนิด
แต่ getTextContent() เป็นเพียงมุมมองที่ผ่านการประมวลผลมาแล้ว มันเป็นเวอร์ชันที่ถูกทำให้เรียบง่ายขึ้นจากข้อมูลที่มีอยู่จริง
ใน PDF.js มีข้อมูลอยู่ 3 ระดับ:
• getStructTree(): บอกให้คุณรู้ว่าเอกสารนั้นมีความหมายอย่างไร ประกอบด้วยตาราง หัวข้อ และสูตรต่างๆ
• getOperatorList(): บอกให้คุณรู้ว่าเอกสารนั้นวาดอะไรไว้บ้าง ซึ่งรวมถึงเส้น เส้นทาง (paths) และรูปทรงต่างๆ
• getTextContent(): เป็นมุมมองที่ผ่านการกรองข้อมูลจากสิ่งที่เอกสารวาดไว้
เครื่องมือส่วนใหญ่เลือกใช้ตัวเลือกที่สาม ซึ่งใช้ได้กับเอกสารประมาณ 80% เช่น รายงานทั่วไป อย่างไรก็ตาม วิธีนี้จะล้มเหลวเมื่อใช้กับบทความวิชาการและสิ่งพิมพ์ที่มีความซับซ้อน
การใช้เพียง getTextContent() ก่อให้เกิดปัญหาหลัก 4 ประการ:
- คุณจะสูญเสียโครงสร้างตาราง คุณต้องคาดเดาตำแหน่งของเซลล์โดยอิงจากตำแหน่งของข้อความ
- สมการคณิตศาสตร์จะผิดเพี้ยน สมการ LaTeX มักจะปรากฏเป็นบล็อกข้อความขนาดใหญ่เพียงบล็อกเดียว
- คุณจะพลาดเส้นแบ่งคอลัมน์ เลย์เอาต์จำนวนมากใช้เส้นจริงในการแบ่งคอลัมน์ ซึ่งเส้นเหล่านี้ไม่มีอยู่ในเนื้อหาข้อความ
- คุณจะได้ลำดับการอ่านที่ผิดพลาด ข้อความมักจะปรากฏตามลำดับที่มันถูกวาดขึ้น ไม่ใช่ตามลำดับที่มนุษย์อ่าน
วิธีที่ถูกต้องในการสร้างตัวประมวลผล PDF คือระบบแบบ 3 ระดับ (three-tier system):
- ตรวจสอบ
getStructTree()ก่อน หากเอกสารมีโครงสร้างที่เป็นตรรกะ ให้ใช้ข้อมูลนี้เพื่อค้นหาตารางและหัวข้อได้ทันที - ตรวจสอบ
getOperatorList()เป็นลำดับถัดไป ใช้เส้นและเส้นทาง (paths) ที่ชัดเจนเพื่อหาขอบเขตของคอลัมน์ - ใช้
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
