pdf2md

เครื่องมือภายใน · the-harmony-projects

pdf2md

แปลง PDF เป็น Markdown บนเครื่องตัวเอง ทำมาเพื่อเอกสารไทยโดยเฉพาะ — ซึ่งเป็นงานที่เครื่องมือฝรั่งส่วนใหญ่อ่านไม่ออก

ไม่ใช้ OCR ไม่ใช้ AI ไม่ต่อเน็ต ไม่มีค่าใช้จ่าย Python 3.12 · Windows

ปัญหาที่แก้

วรรณยุกต์ไทยที่หายไปในช่องอักษรละติน

PDF ที่ export จาก Canva, Figma หรือ Illustrator มักฝังฟอนต์แบบ subset ที่วางวรรณยุกต์และสระไว้ในช่องรหัสของตัวอักษรละติน พอดึงข้อความออกมาจึงได้แบบนี้

ดึงออกมาตรงๆ

สิ่งทีcเราคิด อาจเปqน “ความคิดเห็น” แบบนัfน · ปaญหา · ฝdาย · เปgาหมาย · ปvก

หลัง pdf2md

สิ่งที่เราคิด อาจเป็น “ความคิดเห็น” แบบนั้น · ปัญหา · ฝ่าย · เป้าหมาย · ปีก

ทดสอบกับหนังสือ Enneagram ไทย 66 หน้า · ซ่อม 741 จุด · ตกค้าง 4 ตัวจาก 88,000

เส้นทางการทำงาน

สองชั้น ไม่มี OCR ที่ไหนเลย

1

pdf-inspector Firecrawl · Rust

จัดประเภทเอกสารและดึงหน้าที่อ่านออก ได้ตารางและหัวข้อครบ เร็วระดับมิลลิวินาที ใช้ extract_pages_markdown() เท่านั้น

2

PyMuPDF + thaifix + layout

รับช่วงหน้าที่ชั้นแรกอ่านไม่ออก ซึ่งกับเอกสารไทยคือเกือบทั้งเล่ม พร้อมเดาโครงสร้างจากขนาดฟอนต์และซ่อมวรรณยุกต์

—

หน้าที่เป็นรูปภาพล้วน

ข้ามและรายงานเลขหน้าให้ทราบ หน้าพวกนั้นต้อง OCR เท่านั้น ซึ่งเครื่องมือนี้ไม่ทำโดยตั้งใจ

ห้ามใช้ process_pdf().markdown กับเอกสารไทย

มันคืนข้อความมั่ว 103,000 ตัวมาเงียบๆ โดยไม่มี error — ธงเตือนซ่อนอยู่ที่ .has_encoding_issues ส่วน extract_pages_markdown() ยอมคืนค่าว่างพร้อมเหตุผล suspected_garbled_text แทนที่จะเดามั่ว

ผลวัดจริง · หนังสือไทย 66 หน้า

ทำไมต้องมีชั้นที่สอง

วิธีหน้าที่อ่านได้อักษรไทยเวลา
extract_pages_markdown()1 / 6624877 ms
process_pdf().markdownมั่วทั้งเล่ม—877 ms
PyMuPDF ชั้น 266 / 6688,117331 ms
pymupdf4llm66 / 66เสีย 2,933 ตัว9,718 ms

pymupdf4llm จัดโครงสร้างสวยกว่า แต่แปลงวรรณยุกต์ที่แมปผิดเป็น U+FFFD ซึ่งกู้กลับไม่ได้ จึงไม่ใช้

thaifix.py

หาตารางแมปจากตัวเอกสารเอง

ไม่มีตารางตายตัวให้ตั้งค่า เพราะ PDF แต่ละเจ้าวางวรรณยุกต์คนละช่อง ตัวโปรแกรมหาคำตอบเองสามชั้น

c→่
ทีc · 478
q→็
เปqน · 115
f→้
นัfน · 98
a→ั
ปaญหา · 70
g→้
เปgา · 36
d→่
ฝdาย · 26
v→ี
ปvก · 11
1

ชื่อ glyph ในฟอนต์

ฟอนต์ subset ที่ยังเก็บชื่อแบบ uni0E48 บอกคำตอบตรงๆ แม่นที่สุดและฟรี — แต่เล่มทดสอบนี้ชื่อเป็น glyph00148 จึงใช้ไม่ได้

2

พจนานุกรมไทย pythainlp · 62,101 คำ

ลองแทนวรรณยุกต์ทุกตัว แล้วเลือกอันที่ได้คำจริงมากที่สุด

3

learned_map.json

เก็บที่เดาได้แล้ว ไฟล์ถัดไปที่ใช้ฟอนต์ชุดเดียวกันข้ามขั้นตอนหาไปเลย

จุดที่ทำให้แม่นจาก 4/7 เป็น 7/7

พจนานุกรมอย่างเดียวไม่พอ เพราะ ปvก เดาได้ทั้ง ปีก · ปัก · ปึก ซึ่งเป็นคำจริงทั้งหมด ตัวตัดสินคือใช้เอกสารเป็นพยานตัวเอง — นับว่าคำที่เดาได้เคยโผล่แบบสะกดถูกอยู่แล้วในเล่มเดียวกันกี่ครั้ง เล่มนี้มี “ปีก” ถูกอยู่ 10 ครั้ง ซึ่งสมเหตุสมผลเพราะปีกเป็นศัพท์หลักของ Enneagram

วิธีใช้

คำสั่งเดียว รับทั้งไฟล์และทั้งโฟลเดอร์

pip install pdf-inspector pymupdf pythainlp fonttools
pdf2md.cmd "C:\Users\Asus\Downloads\ไฟล์.pdf"
pdf2md.cmd "C:\Users\Asus\Downloads" -o "C:\Users\Asus\Documents\md"

ใส่โฟลเดอร์ = ไล่โฟลเดอร์ย่อยให้ด้วย · ไม่ใส่ -o = วางไฟล์ .md ข้างไฟล์ต้นทาง · เติม --json ถ้าจะให้สคริปต์อื่นอ่านผลต่อ

ไฟล์ในโครงการ

Documents\00-hq\tools\pdf2md\

pdf2md.pyตัวหลัก · CLI · ประกอบผลลัพธ์ทีละหน้า
thaifix.pyหาตารางแมปวรรณยุกต์สามชั้น แล้วซ่อมข้อความ
layout.pyเดาหัวข้อ รายการ ย่อหน้า จากขนาดและน้ำหนักฟอนต์
pdf2md.cmdตัวเรียกสำหรับ Windows · ตั้ง UTF-8 ให้คอนโซล
selftest.pyทดสอบตัวเอง 16 ข้อ สร้าง PDF ทดสอบขึ้นเอง
learned_map.jsonตารางที่สะสมไว้ · สร้างเองอัตโนมัติ

ข้อจำกัดที่รู้อยู่

สิ่งที่เครื่องมือนี้ไม่ทำ

ที่อยู่ของหน้านี้

subfolder + ตัวอักษรสุ่ม

โดเมน the-harmony-projects.com ใช้ร่วมกันหลายคน และ FTP ของเราเห็นไม่ครบทั้งบัญชี ทุกโปรเจกต์จึงอยู่ในโฟลเดอร์ที่มีตัวอักษรสุ่มต่อท้าย เพื่อให้ไม่มีทางไปทับของเดิมที่มองไม่เห็น

ชั้นที่อยู่สถานะ
Macalyb37p2sbfjf9vkbqf5zjubkd1.macaly.appขึ้นแล้ว
โดเมนหลักthe-harmony-projects.com/thp-pdf2md/ไฟล์พร้อมอัป

เลิกใช้ subdomain แล้วตั้งแต่ 9 ก.ย. 2026 — subfolder อัปเองได้ทันทีด้วย FTP ไม่ต้องรอแอดมินโฮสต์ ส่วนตัวอักษรสุ่มกันชื่อชน ทะเบียนที่อยู่ทั้งหมดอยู่ที่ content/url-system/registry.json