ดึงข้อความจาก PDF: เลเยอร์ข้อความและ OCR
PDF บางไฟล์ให้ข้อความออกมาได้ในวินาทีเดียว แต่บางไฟล์มีเพียงภาพของหน้าและต้องใช้ OCR คู่มือนี้อธิบายว่าข้อความถูกเก็บใน PDF อย่างไร ทำไมข้อความที่ดึงออกมาจึงเพี้ยนหรือเรียงผิดลำดับได้ OCR อ่านหน้าที่สแกนอย่างไรและอะไรมีผลต่อความแม่นยำ รวมถึงสิ่งที่ควรตรวจก่อนนำผลลัพธ์ไปใช้
หน้า PDF สองประเภท
หน้า PDF เก็บข้อความได้สองแบบ PDF ส่วนใหญ่ที่ส่งออกจากโปรแกรมประมวลผลคำ เบราว์เซอร์ หรือโปรแกรมออกแบบ จะมีเลเยอร์ข้อความ คืออักขระแต่ละตัวถูกเก็บเป็นรหัสในฟอนต์และวางไว้ที่ตำแหน่งหนึ่งบนหน้า ส่วนหน้าที่สแกนหรือถ่ายภาพนั้นต่างออกไป เพราะเป็นภาพเดียวของทั้งหน้า สำหรับซอฟต์แวร์แล้ว ตัวอักษรบนภาพเป็นเพียงพิกเซล
| ประเภทหน้า | สร้างขึ้นอย่างไร | ผลจากการดึงข้อความ |
|---|---|---|
| PDF ข้อความ | ส่งออกหรือพิมพ์เป็น PDF จากแอป | อักขระที่เก็บไว้ ซึ่งมักตรงทุกตัว |
| PDF สแกน | เครื่องสแกน กล้องโทรศัพท์ หรือแฟกซ์ | ไม่มีอะไรจนกว่า OCR จะอ่านภาพ |
| สแกนที่ค้นหาได้ | ภาพสแกนที่ภายหลังเพิ่มเลเยอร์ข้อความจาก OCR | ผล OCR ครั้งนั้นพร้อมข้อผิดพลาด |
| ข้อความที่แปลงเป็นเส้นโครงร่าง | ข้อความถูกแปลงเป็นรูปทรงในโปรแกรมออกแบบ | ไม่มีอักขระ อ่านได้ด้วย OCR เท่านั้น |
โปรแกรมดู PDF มักบอกได้ว่าเป็นแบบใด หากเลือกคำเดียวได้หรือค้นเจอด้วยช่องค้นหา หน้านั้นมีเลเยอร์ข้อความ หากลากแล้วทั้งหน้าถูกเลือกเป็นก้อนเดียว หรือค้นหาไม่เจออะไรเลย หน้านั้นเป็นภาพ ไฟล์เดียวอาจมีทั้งสองแบบ เช่น รายงานที่พิมพ์ด้วยคอมพิวเตอร์พร้อมภาคผนวกที่สแกนมา
การดึงข้อความจากเลเยอร์ข้อความทำงานอย่างไร
PDF ไม่ได้เก็บเป็นย่อหน้า แต่เก็บเป็นชิ้นส่วนของอักขระ ซึ่งแต่ละชิ้นมีฟอนต์และตำแหน่ง มักทีละคำหรือทีละไม่กี่ตัวอักษร ตามลำดับที่โปรแกรมผู้สร้างไฟล์เลือก ตัวดึงข้อความจะอ่านชิ้นส่วนเหล่านี้แล้วประกอบบรรทัดขึ้นใหม่จากตำแหน่ง
เครื่องมือ PDF เป็นข้อความของ LeedyBox อ่านชิ้นส่วนด้วย PDF.js ซึ่งเป็นเอนจิน PDF ของ Firefox เครื่องมือจะขึ้นบรรทัดใหม่เมื่อตำแหน่งแนวตั้งเปลี่ยนเกิน 5 พอยต์ (ประมาณ 1.8 มม.) มิฉะนั้นจะเชื่อมชิ้นส่วนด้วยช่องว่าง และแต่ละหน้าในผลลัพธ์จะเริ่มด้วยเครื่องหมาย เช่น --- หน้า 1 --- เอกสารคอลัมน์เดียวส่วนใหญ่จึงอ่านได้ดี แต่มีผลข้างเคียงบางอย่าง
- คำที่ถูกเก็บเป็นหลายชิ้น เช่น จากการปรับระยะห่างตัวอักษร อาจมีช่องว่างแทรกอยู่กลางคำ ข้อความภาษาไทยซึ่งไม่เว้นวรรคระหว่างคำก็อาจมีช่องว่างแทรกในจุดที่ไม่ควรมี
- คอลัมน์ กล่องข้าง และคำบรรยายภาพจะออกมาตามลำดับที่เก็บไว้ ซึ่งอาจต่างจากลำดับการอ่าน
- ตัวยก เครื่องหมายเชิงอรรถ และข้อความที่อยู่สูงหรือต่ำกว่าบรรทัด อาจกลายเป็นบรรทัดแยก
- หัวกระดาษ ท้ายกระดาษ และเลขหน้า เป็นส่วนหนึ่งของข้อความในแต่ละหน้าด้วย
ทำไมข้อความที่ดึงออกมาจึงเพี้ยน
ภายใน PDF ข้อความถูกเก็บเป็นรหัสกลิฟของฟอนต์ ไม่ใช่อักขระ Unicode การแปลงรหัสกลับเป็นตัวอักษรต้องมีตารางจับคู่ในไฟล์ PDF ที่สร้างอย่างดีจะมีตาราง ToUnicode สำหรับแต่ละฟอนต์ และฟอนต์ที่ใช้การเข้ารหัสมาตรฐานก็ถอดรหัสได้แม้ไม่มีตารางนี้ ปัญหาเกิดเมื่อฟอนต์ถูกฝังเป็นชุดย่อยที่มีการกำหนดหมายเลขของตัวเองและไม่มีตารางจับคู่ รหัสเหล่านั้นไม่มีความหมายนอกไฟล์ ผลการดึงข้อความจึงเป็นตัวอักษรผิด สัญลักษณ์แปลก หรือกล่องว่าง ทั้งที่หน้าดูปกติ ฟอนต์ภาษาไทยรุ่นเก่าที่วางสระและวรรณยุกต์ด้วยรหัสพิเศษก็อาจทำให้สระลอยหรือหายไปเมื่อดึงข้อความ
ฟอนต์ภาษาจีน ญี่ปุ่น และเกาหลีมักใช้ตารางจับคู่อักขระที่กำหนดไว้ล่วงหน้า (CMap) เช่น Adobe-Japan1 หรือ Adobe-Korea1 แทนตารางของตัวเอง เครื่องมือ LeedyBox โหลด CMap เหล่านี้มาพร้อม PDF.js จึงอ่านเอกสารเอเชียตะวันออกจำนวนมากได้ถูกต้อง ทั้งที่ตัวดึงข้อความแบบง่ายทำให้เพี้ยน สาเหตุอื่นที่พบบ่อย ได้แก่ อักษรควบอย่าง fi ที่เก็บเป็นกลิฟเดียว ฟอนต์ Type 3 ที่วาดตัวอักษรเป็นรูปทรงและมักไม่มีตารางจับคู่ และ PDF ที่จงใจสลับการเข้ารหัสเพื่อให้คัดลอกยาก
เมื่อหน้ามีเลเยอร์ข้อความ เครื่องมือจะใช้เลเยอร์นั้นแม้ข้อความจะเพี้ยน และไม่รัน OCR กับหน้านั้น หากต้องการอ่านหน้าลักษณะนี้ด้วย OCR ให้แปลงเป็นภาพด้วย PDF เป็น JPG แล้วอ่านภาพด้วยแปลงภาพเป็นข้อความ (OCR)
เครื่องมือ LeedyBox ใช้ OCR เมื่อใด
เครื่องมือตัดสินใจทีละหน้า หากเลเยอร์ข้อความของหน้ามีน้อยกว่า 15 อักขระ หน้านั้นจะถูกวาดเป็นภาพที่ขนาดสองเท่าของปกติ ประมาณ 144 พิกเซลต่อนิ้ว แล้ว Tesseract.js จะอ่านด้วยภาษาที่เลือกใน “ภาษา OCR” ร่วมกับภาษาอังกฤษ ในเอกสารที่มีทั้งหน้าที่พิมพ์และหน้าที่สแกน หน้าที่พิมพ์จึงถูกอ่านอย่างตรงตัว และมีเพียงหน้าสแกนที่ผ่าน OCR
หน้าสแกนที่มีอักขระไม่กี่ตัวจากตราประทับหรือเลขหน้ายังถือว่าว่างและผ่าน OCR ส่วนภาพสแกนที่มีเลเยอร์ข้อความตั้งแต่ 15 อักขระขึ้นไปอยู่แล้วจะไม่ผ่าน OCR เลเยอร์ OCR คุณภาพต่ำที่เครื่องสแกนใส่ไว้จึงออกมาตามเดิม เอนจิน OCR และข้อมูลภาษาจะถูกดาวน์โหลดจาก leedybox.comเมื่อรัน OCR ครั้งแรก หน้าสแกนหน้าแรกจึงใช้เวลานานกว่า ไฟล์ PDF ของคุณถูกอ่านในเบราว์เซอร์และไม่ถูกอัปโหลด
OCR เปลี่ยนพิกเซลเป็นข้อความอย่างไร
OCR ทำงานเป็นขั้นตอน เอนจินจะแปลงภาพเป็นขาวดำก่อน แล้วหาบล็อกข้อความ บรรทัด และคำ ขั้นตอนนี้เรียกว่าการแบ่งส่วนหน้า จากนั้นโครงข่ายประสาทเทียมที่ฝึกมาสำหรับภาษาหรือระบบการเขียนหนึ่ง ๆ จะอ่านแต่ละบรรทัดและเลือกลำดับอักขระที่น่าจะเป็นที่สุด โดยอาศัยรายการคำของภาษานั้นช่วย ผลลัพธ์จึงเป็นการคาดเดาที่ดีที่สุด ไม่ใช่สำเนา รูปร่างที่คล้ายกัน เช่น 0 กับ O, 1 กับ l และ I หรือ rn กับ m อาจสับสนกันได้ และคำที่ไม่มีในข้อมูลภาษามักถูกอ่านผิดบ่อยกว่า ในภาษาไทย สระบนล่างและวรรณยุกต์ที่เล็กมากเป็นจุดที่ผิดพลาดได้ง่าย
การตั้งค่าภาษาสำคัญกว่าตัวเลือกอื่นใด โมเดลที่ฝึกด้วยอักษรละตินอ่านภาษาไทยหรือญี่ปุ่นไม่ได้ และข้อความในภาษาที่ไม่ได้เลือกมักออกมาเป็นอักขระผิด ทุกตัวเลือกในเครื่องมือ LeedyBox ยกเว้น “อังกฤษเท่านั้น” จะรวมภาษาที่เลือกกับภาษาอังกฤษ ซึ่งช่วยกับเอกสารสองภาษา เช่น สัญญาภาษาไทยที่มีชื่อสินค้าเป็นภาษาอังกฤษ
ปัจจัยที่มีผลต่อความแม่นยำของ OCR
| ปัจจัย | ผลกระทบ | สิ่งที่ช่วยได้ |
|---|---|---|
| ความละเอียด | ตัวอักษรเล็กสูญเสียรายละเอียดที่ใช้แยกตัวอักษร | สแกนที่ 300 DPI ขึ้นไป และสูงกว่านั้นสำหรับตัวอักษรเล็ก |
| ความเอียงและความโค้ง | บรรทัดที่เอียงและหน้าหนังสือที่โค้งทำให้หาบรรทัดได้ยาก | สแกนให้เรียบและตรง ถ่ายภาพจากด้านบนตรง ๆ |
| คอนทราสต์และสัญญาณรบกวน | พื้นหลังสีเทา คราบ หน้าหลังที่ทะลุมา และร่องรอยการบีบอัด JPEG ดูเหมือนเส้นอักษร | ภาพสแกนที่สะอาด ตัวอักษรเข้มบนพื้นขาว |
| ฟอนต์ | ฟอนต์ตกแต่ง ฟอนต์ที่บางหรือหนามากถูกอ่านผิดบ่อยกว่า | ตรวจผลลัพธ์อย่างละเอียด |
| ลายมือ | Tesseract ถูกฝึกด้วยตัวพิมพ์ | อย่าคาดหวังผลที่ดี ควรพิมพ์ใหม่ |
| ข้อความแนวตั้ง | ภาษาญี่ปุ่นหรือจีนที่เขียนแนวตั้งมักถูกอ่านผิด | ตรวจอย่างละเอียดหรือพิมพ์ใหม่ |
เพราะเครื่องมือวาดหน้าที่ประมาณ 144 พิกเซลต่อนิ้ว ตัวอักษรเล็ก เช่น เชิงอรรถหรือข้อความตัวเล็กในสัญญา อาจอ่านยากแม้ภาพสแกนจะดี สำหรับหน้าแบบนี้ PDF เป็น JPG สร้างภาพที่ความละเอียดสูงกว่า และแปลงภาพเป็นข้อความ (OCR) สามารถอ่านข้อความขนาดเล็กอีกครั้งที่ขนาดสองเท่าและเพิ่มคอนทราสต์ก่อนการจดจำได้
ตาราง คอลัมน์ และเลย์เอาต์
ผลลัพธ์เป็นข้อความธรรมดา ตารางจะเสียเส้นตาราง หน้าหลายคอลัมน์อาจออกมาทีละคอลัมน์หรือทีละบรรทัดข้ามคอลัมน์ และกล่องข้อความกับคำบรรยายภาพจะไปอยู่ตรงที่ไฟล์หรือเอนจิน OCR จัดไว้ในลำดับการอ่าน การจดจำคำกับการสร้างเลย์เอาต์ใหม่เป็นคนละปัญหา และเครื่องมือนี้แก้เฉพาะปัญหาแรก สำหรับตารางตัวเลข ให้ตรวจทุกค่ากับต้นฉบับหรือพิมพ์ตารางใหม่ในสเปรดชีต สำหรับเอกสารยาว ให้จัดหัวข้อและย่อหน้าใหม่ในโปรแกรมแก้ไขหลังดึงข้อความแล้ว
ตรวจสอบและเก็บกวาดผลลัพธ์
- เทียบตัวเลข ชื่อ และวันที่บางส่วนกับต้นฉบับ ข้อผิดพลาดของ OCR ในตัวเลขมองข้ามได้ง่าย
- ค้นหาจุดที่มักสับสน เช่น 0 กับ O, 1 กับ l และ I, 5 กับ S, rn กับ m รวมถึงสระและวรรณยุกต์ที่หายหรือผิดตำแหน่ง
- เชื่อมคำที่ถูกตัดด้วยยัติภังค์ท้ายบรรทัด และบรรทัดที่ขาดกลางย่อหน้าให้ต่อกัน
- ลบเครื่องหมายหน้า หัวกระดาษ และเลขหน้า หากต้องการข้อความต่อเนื่อง
- เก็บผลลัพธ์ด้วย “คัดลอกข้อความ” หรือ “บันทึกเป็น .TXT” ไฟล์ที่บันทึกเป็นข้อความธรรมดาแบบ UTF-8
คำถามที่พบบ่อย
ทำไมบางหน้าจึงออกมาว่างเปล่า
หน้านั้นไม่มีเลเยอร์ข้อความ และ OCR ไม่พบสิ่งที่อ่านได้ ภาพสแกนอาจว่าง จางมาก หรือเล็กเกินไป หรือข้อความเป็นลายมือ ลองสแกนให้ชัดขึ้น หรือแปลงหน้าด้วย PDF เป็น JPG แล้วใช้แปลงภาพเป็นข้อความพร้อมตัวเลือกเพิ่มคอนทราสต์และขยายภาพ
อ่าน PDF ที่ตั้งรหัสผ่านได้ไหม
อ่าน PDF ที่ถามรหัสผ่านตอนเปิดไม่ได้ เครื่องมือจะแสดงข้อผิดพลาดแทน หากคุณมีสิทธิ์ ให้เปิดไฟล์ด้วยรหัสผ่านในโปรแกรมดู PDF แล้วบันทึกสำเนาที่ไม่มีการป้องกันก่อน
เครื่องมือสร้าง PDF ที่ค้นหาได้หรือไม่
ไม่ได้ ผลลัพธ์เป็นข้อความธรรมดาที่คัดลอกหรือบันทึกเป็นไฟล์ .txt ได้ และไฟล์ PDF จะไม่ถูกแก้ไข โปรแกรมที่สร้าง PDF ที่ค้นหาได้จะเพิ่มเลเยอร์ข้อความ OCR ที่มองไม่เห็นทับบนหน้าสแกนแต่ละหน้า
ทำไม OCR จึงช้ากับเอกสารยาว
หลังดาวน์โหลดเอนจิน OCR และข้อมูลภาษาแล้ว หน้าสแกนแต่ละหน้าจะถูกวาดเป็นภาพและจดจำในเบราว์เซอร์ทีละหน้า บนอุปกรณ์ที่ช้า หน้าหนึ่งอาจใช้เวลาหลายวินาทีหรือมากกว่านั้น หน้าที่มีเลเยอร์ข้อความเร็วกว่ามากเพราะไม่ต้องจดจำ