แยกวิเคราะห์วัตถุรูปร่าง PDF ด้วย iTextSharp โดยใช้ .Net

ฉันกำลังพยายามแยกวิเคราะห์ PDF จำนวนหนึ่งที่มีส่วนของสิ่งที่ดูเหมือนเป็นข้อความ แต่ในความเป็นจริงเป็นเพียงรูปร่างที่ฝังไว้เพื่อให้ ดูเหมือน ข้อความ ดังนั้นให้แยก 'ข้อความ' นั้นโดยใช้ วัตถุ PdfTextExtractor ปกติใน iTextSharp ไม่สามารถทำได้

เนื่องจากข้อความที่ฉันพยายามแยกออกมาเป็นหนึ่งใน 10 คำที่เป็นไปได้ แทนที่จะ 'อ่าน' คำจริงๆ (หรือค่อนข้างจะเป็น 'รูปร่างในรูปแบบของคำ') ฉันคิดว่าฉันสามารถระบุได้ว่าคำนั้นคืออะไรโดยการเปรียบเทียบ มันขัดแย้งกับผู้อื่นที่ฉันระบุแล้ว

คำถามแรกของฉันคือ ฉันจะไปที่ส่วนนี้ของ PDF ได้อย่างไร ฉันจะใช้ iText เพื่อแยกวิเคราะห์เอกสารเพื่อเจาะลึกไปยังวัตถุรูปร่างนี้ได้อย่างไร มีคำทั่วไปที่เริ่มต้นส่วนนี้ในเอกสารทั้งหมดของฉัน ดังนั้นฉันคิดว่าฉันสามารถใช้คำนั้นเป็นจุดสังเกตเพื่อให้รู้ว่าเมื่อใดที่ฉันอยู่ในพื้นที่ที่ถูกต้อง แต่ฉันจะทำซ้ำรูปร่างทั้งหมดของเอกสารได้อย่างไร

จากนั้น เมื่อฉันพบมันแล้ว ฉันจะระบุรูปร่างเฉพาะ (ส่วนของเส้น) ของคำอื่นๆ ได้อย่างไรเพื่อพิจารณาว่าฉันกำลังดูตัวอักษรตัวไหน

เพื่ออธิบายปัญหา นี่เป็นสถานการณ์ที่เปรียบเทียบได้ - ส่วนที่ฉันต้องแยกวิเคราะห์คือคำอธิบายแผนที่ และมันจะเป็นพื้นที่ของ PDF ที่มีลักษณะดังนี้:

-- ตำนาน --

  • ถนน
  • ทางหลวง
  • แม่น้ำ

ถ้าฉันพบรูปร่างที่แสดงถึงคำว่า 'LEGEND' ฉันรู้ว่าฉันมาถูกที่แล้ว ฉันก็ลองพิจารณาว่าคำใดที่อยู่ในคำอธิบายนั้นได้ (เนื่องจากเป็นรายการจำกัดเพียงประมาณ 10 คำ) แต่ฉันจะทำอย่างไร?

ฉันใช้ .NET ดังนั้นตัวอย่างโค้ด C# หรือ VB.Net ใดๆ น่าจะเหมาะกับฉัน


person Avi    schedule 09.09.2011    source แหล่งที่มา


คำตอบ (1)


คุณมีความสงสารของฉัน

วิธีเดียวที่สมเหตุสมผลในการจัดการกับเรื่องประเภทนี้คือผ่าน OCR การรู้จำอักขระด้วยแสง มีแพ็คเกจ OCR โอเพ่นซอร์สที่เหมาะสมอย่างน้อยหนึ่งแพ็คเกจที่จะพบบนโค้ดของ Google

แพ็คเกจ Pdf Parser ยังไม่รองรับภาพลายเส้นแต่อย่างใด เว้นแต่ว่าคุณต้องการเขียนการสนับสนุนด้วยตัวเอง

เมื่อคุณมีตัวอย่างที่ "รู้ดี" ของแต่ละคำใน 10 คำของคุณแล้ว คุณอาจจะสามารถสร้าง RegEx ขึ้นมาซึ่งจะตรวจจับแต่ละคำอย่างสม่ำเสมอ สิ่งนี้จะล้มเหลวเว้นแต่ว่า "ข้อความ" ของคุณจะอยู่ใน "แบบอักษร" เดียวกันเสมอ

คุณจะต้องค้นหาชุดคำสั่ง lineTo/curveTo/moveTo ที่เฉพาะเจาะจง

คุณจะต้องละเว้นพิกัดใน RegEx ของคุณ แต่จากนั้นกลับไปแยกวิเคราะห์หากคุณต้องการกำหนดกรอบขอบเขตสำหรับคำที่กำหนด

สนุกๆๆๆๆๆๆๆๆ.

person Mark Storer    schedule 13.09.2011