บล็อก

วิธีแปลงไฟล์ PDF และ Word ให้เป็นข้อความสำหรับ AI: MarkItDown ของ Microsoft

Markdown

รีวิวเชิงลึก: วิธีแปลงไฟล์ PDF และ Word ให้เป็นข้อความสำหรับ AI: MarkItDown ของ Microsoft

อ่านบทความฉบับเต็ม

ประเด็นสำคัญ

MarkItDown เป็นยูทิลิตีฟรีจาก Microsoft ที่แปลงไฟล์ Word, Excel, งานนำเสนอ และ PDF ให้เป็นข้อความที่มีโครงสร้างสำหรับ AI โปรแกรมแยกวิเคราะห์ไฟล์ Office ได้อย่างเรียบร้อยภายในเวลาเพียงเสี้ยววินาที แต่จะแปลง PDF ที่มีเลย์เอาต์ซับซ้อนให้กลายเป็นข้อมูลยุ่งเหยิง และคืนไฟล์ว่างพร้อมรหัสออกเป็นศูนย์เมื่อเป็นไฟล์สแกน ด้านล่างนี้มีคำสั่งติดตั้งที่ใช้งานได้ ผลการวัดบนเอกสารที่มีข้อความซีริลลิก และหลักเกณฑ์สำหรับตัดสินใจว่าเมื่อใดควรใช้เครื่องมืออื่น

ดูคำแนะนำเพิ่มเติมได้ในเอกสารของ Ailoot

MarkItDown คืออะไร และใช้ทำอะไร?

ประเด็นสำคัญ

MarkItDown เป็นยูทิลิตี Python จาก Microsoft ที่อ่านไฟล์แล้วส่งคืนเนื้อหาเป็นข้อความที่มีโครงสร้าง หัวข้อจะกลายเป็นหัวข้อ และตารางจะกลายเป็นตาราง โปรแกรมอยู่ในรีโพซิทอรี GitHub แบบเปิดภายใต้สัญญาอนุญาต MIT ติดตั้งได้ด้วยคำสั่งเดียว และประมวลผลทุกอย่างบนเครื่องของคุณ มีหน้าที่อย่างเดียวคือเตรียมเอกสารให้ AI มองเห็นทั้งคำและโครงสร้าง

คุณส่งสัญญา รายงาน หรือไฟล์ส่งออกทางบัญชีให้ AI แล้วได้คำตอบที่ไม่เกี่ยวกับเอกสาร สาเหตุมักไม่ใช่ตัวโมเดล ไฟล์มีรูปแบบของมันเอง: Word เป็นคลังไฟล์ที่มีมาร์กอัป Excel เป็นสเปรดชีตที่เซลล์เชื่อมโยงกัน ส่วน PDF เป็นชุดอักขระพร้อมพิกัดบนหน้า โมเดลทำงานกับข้อความ จึงต้องมีใครสักคนดึงข้อความนั้นออกมา

MarkItDown ทำหน้าที่นี้ รีโพซิทอรีอยู่ที่ github.com/microsoft/markitdown ภายใต้สัญญาอนุญาต MIT จึงใช้งานได้โดยไม่มีข้อจำกัด ณ วันที่ 18 สิงหาคม 2026 มีดาว 174,412 ดวงและ forks 12,756 รายการ ส่วนรุ่นล่าสุด 0.1.7 ออกเมื่อวันที่ 29 กรกฎาคม โปรเจกต์ยังดำเนินอยู่ แต่จุดเน้นเปลี่ยนจากการพัฒนาไปเป็นการบำรุงรักษา: มี pull request ที่ยังเปิดอยู่ 481 รายการ เทียบกับรายการที่ merge แล้ว 183 รายการตลอดประวัติของโปรเจกต์

ผู้พัฒนาอธิบายจุดประสงค์ไว้ดังนี้:

MarkItDown เป็นยูทิลิตี Python น้ำหนักเบาสำหรับแปลงไฟล์หลากหลายรูปแบบเป็น Markdown เพื่อใช้กับโมเดลภาษาขนาดใหญ่และไปป์ไลน์วิเคราะห์ข้อความที่เกี่ยวข้อง

— Microsoft, คำอธิบายโปรเจกต์ (แปลแล้ว), https://github.com/microsoft/markitdown

ประโยคถัดไปในคำอธิบายช่วยอธิบายข้อร้องเรียนเกี่ยวกับเครื่องมือนี้ได้ครึ่งหนึ่ง:

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

— Microsoft, คำอธิบายโปรเจกต์ (แปลแล้ว), https://github.com/microsoft/markitdown

ผลลัพธ์เป็นวัตถุดิบสำหรับโมเดล มันจะไม่ใช่เอกสารที่สวยงาม และโปรเจกต์ก็ระบุเรื่องนี้ไว้อย่างชัดเจนตั้งแต่ส่วนแรก

คำอธิบายตอบตรง ๆ ว่าทำไมจึงใช้ Markdown: โมเดลชั้นนำ “พูด” มาร์กอัปนี้ได้อยู่แล้ว และใส่มันลงในคำตอบโดยไม่ต้องร้องขอ เพราะได้เห็นข้อมูลจำนวนมหาศาลในระหว่างการฝึก มาร์กอัปยังมีขนาดกะทัดรัดด้วย: ใช้เครื่องหมายแฮชสามตัวสำหรับหัวข้อ แทนเมทาดาทาหลายสิบแถว

MarkItDown ต่างจากตัวแปลงทั่วไปอย่างไร?

ประเด็นสำคัญ

ตัวแปลงอย่าง pandoc แปลงภาษามาร์กอัปหนึ่งไปเป็นอีกภาษาและรักษาเลย์เอาต์ไว้ให้คนอ่าน pandoc ไม่รับ PDF เป็นอินพุตเลย MarkItDown แก้ปัญหาตรงกันข้าม: ดึงเนื้อหาจากไฟล์ Office แล้วจัดเรียงให้โมเดลเข้าใจได้ทันทีโดยไม่เปลืองโทเคน เป้าหมายของมันไม่ใช่การรักษาเลย์เอาต์ที่มองเห็นได้ และนี่คือความแตกต่างทั้งหมด

ตัวอย่างเดียวก็ทำให้เห็นความต่างได้ชัด ลองมีโฟลเดอร์ที่มี PDF ยี่สิบไฟล์แล้วนำไปประมวลผลด้วย pandoc ดู จะใช้ไม่ได้: pandoc สร้าง PDF เป็นเอาต์พุตได้ แต่ไม่สามารถอ่านเป็นอินพุตได้ และสถานการณ์แบบ “ฉันมีเอกสารกองหนึ่ง เอาไปให้โมเดลที” เป็นกรณีที่พบได้บ่อยที่สุด

ผู้เขียน MarkItDown เปรียบเทียบเครื่องมือตนกับ textract ซึ่งเป็นไลบรารีที่ดึงข้อความจากที่ใดก็ได้อย่างเดียว ความแตกต่างคือ MarkItDown พยายามรักษาโครงสร้างไว้ ได้แก่ หัวข้อ รายการ ตาราง และลิงก์

คุณสมบัติpandocMarkItDown
อ่าน PDFไม่ได้ได้ แต่มีข้อควรระวัง
อ่าน Word, Excel, งานนำเสนอได้บางส่วนได้
กลุ่มเป้าหมายของเอาต์พุตคนโมเดล
จุดเด่นหลักความเที่ยงตรงของเลย์เอาต์โครงสร้างและจำนวนอักขระที่น้อย
การติดตั้งโปรแกรมแยกต่างหากคำสั่ง Python เดียว

ข้อสรุปในทางปฏิบัติง่ายมาก ถ้าต้องแปลงบทความให้เป็นเลย์เอาต์สำหรับเผยแพร่ ให้ใช้ pandoc ถ้าต้องการให้ AI ทำความเข้าใจสัญญายี่สิบฉบับ ให้ใช้ MarkItDown

ติดตั้ง MarkItDown อย่างไรไม่ให้ได้รุ่นแรกสุด?

ประเด็นสำคัญ

เมื่อใช้รุ่น 0.1.8 คำสั่งในคำอธิบายโปรเจกต์จะติดตั้งรุ่นล่าสุดบน Python 3.14 และ 3.12 โดยทดสอบซ้ำแล้วในสภาพแวดล้อมสะอาดแปดแห่ง การลดรุ่นแบบเงียบ ๆ ไปเป็น 0.0.2 ซึ่งเป็นรุ่นที่สองในประวัติโปรเจกต์ ยังคงเกิดขึ้นบน Python 3.15, Mac ที่ใช้ Intel และรัน 3.14 รวมถึง Mac ที่ใช้ macOS รุ่นเก่ากว่าและรัน 3.13 กับ 3.14 ในกรณีเหล่านี้ตัวติดตั้งรายงานว่าทำสำเร็จ ดังนั้นให้ใช้ Python 3.12 ระบุรูปแบบที่ต้องการเป็นชื่อ ๆ และตรวจสอบหมายเลขรุ่นทันที

เริ่มจากคำสั่งที่ถูกต้อง แล้วจึงอธิบายว่าทำไมจึงถูกต้อง

  1. ตรวจสอบรุ่น Python

    Python 3.12 เชื่อถือได้มากที่สุด: MarkItDown รุ่นล่าสุดติดตั้งได้ในทุกสภาพแวดล้อมที่ทดสอบด้วยรุ่นนี้ คำสั่ง python3 --version จะแสดงรุ่นที่คุณมี บน Mac ที่ใช้ Intel หรือ Mac ที่ใช้ macOS รุ่นเก่า Python 3.13 และ 3.14 อาจลดรุ่นแบบเงียบ ๆ ส่วน Python 3.15 ยังไม่รองรับ ดังที่อธิบายไว้ด้านล่าง

  2. ติดตั้งโดยระบุรูปแบบ

    รัน pip install 'markitdown[pdf,docx,xlsx,pptx]' ต้องใส่เครื่องหมายอัญประกาศ มิฉะนั้น shell จะตีความวงเล็บเหลี่ยม บน Mac ที่ใช้ Intel ให้เพิ่มแฟล็ก --prefer-binary หลัง install

  3. ตรวจสอบทันทีว่าติดตั้งแล้ว

    รัน markitdown --version คำตอบควรเป็น markitdown 0.1.8 หรือใหม่กว่า ตัวเลขที่ต่ำกว่านี้หมายถึงการติดตั้งลดรุ่น ส่วนนี้จะอธิบายสาเหตุ

pip install 'markitdown[pdf,docx,xlsx,pptx]'
markitdown --version

คำอธิบายโปรเจกต์ระบุ pip install 'markitdown[all]' เป็นคำสั่งหลักสำหรับติดตั้งทุกอย่างในคราวเดียว เมื่อวันที่ 28 กันยายน 2026 หนึ่งสัปดาห์หลังจาก 0.1.8 ออก ได้ทดสอบคำสั่งสี่แบบในสภาพแวดล้อมสะอาดบน Mac ที่ใช้ Apple Silicon กับ Python 3.14.6 และ 3.12.12:

คำสั่งติดตั้งบน Python 3.14ติดตั้งบน Python 3.12
pip install markitdown0.1.80.1.8
pip install 'markitdown[pdf,docx,xlsx,pptx]'0.1.80.1.8
pip install 'markitdown[all]'0.1.80.1.8
pip install 'markitdown[all]==0.1.8'0.1.80.1.8

การติดตั้งทั้งแปดครั้งจบลงด้วยข้อความ “Successfully installed” และ markitdown --version แสดง 0.1.8 ทุกครั้ง ในเดือนสิงหาคม เมื่อ 0.1.7 เป็นรุ่นล่าสุด คำสั่งที่สามบน Python 3.14 กลับติดตั้ง 0.0.2 ซึ่งออกเมื่อวันที่ 8 มีนาคม 2025 และเป็นรุ่นที่สองในประวัติโปรเจกต์ ตอนนี้มีรุ่นเสถียรสิบเอ็ดรุ่น ตั้งแต่ 0.0.1 ถึง 0.1.8 และมีทั้งหมดยี่สิบหกรุ่นเมื่อนับรุ่นก่อนเผยแพร่ด้วย

สาเหตุคือสายโซ่ของ dependencies ใน 0.1.7 ส่วนเสริม [all] ดึงไลบรารีคำบรรยาย YouTube จากชุดรุ่นหนึ่งมา และทุกรุ่นในชุดนั้นระบุว่าใช้กับ Python 3.14 ไม่ได้ ตัวติดตั้งปฏิเสธไลบรารีเหล่านั้น และเพราะไม่ได้กำหนดรุ่นไว้ จึงไล่ถอยกลับไปตามรุ่นของ MarkItDown จนพบรุ่นที่ติดตั้งได้ เมื่อพบ 0.0.2 ก็จะติดตั้งลงเครื่อง เป็นการนำรุ่นที่ออกมาเมื่อปีครึ่งก่อนมาติดตั้ง ใน 0.1.8 ได้ปรับข้อกำหนดของไลบรารีคำบรรยายให้ใช้ชุดรุ่นที่ทำงานกับ 3.14 ได้ จึงหยุดการลดรุ่นไว้ตรงนั้น

กลไกนี้ยังคงอยู่ หากตัวติดตั้งหาองค์ประกอบที่จำเป็นสำหรับระบบของคุณไม่พบ ก็จะถอยกลับไปเป็น 0.0.2 แบบเงียบ ๆ เช่นเดิม ในรุ่นใหม่ ๆ องค์ประกอบนั้นคือเอนจิน onnxruntime ที่ตัวตรวจจับชนิดไฟล์ใช้ บน Mac มีรุ่นดังนี้: สำหรับ Python 3.12 ใช้ได้กับ macOS 11 ขึ้นไป; สำหรับ 3.13 ใช้ได้กับ macOS 13; สำหรับ 3.14 ใช้ได้เฉพาะ Apple Silicon ที่ใช้ macOS 14 ขึ้นไป หาก Mac ของคุณไม่ตรงตามข้อกำหนด แม้แต่คำสั่งพื้นฐาน pip install markitdown ก็จะติดตั้ง 0.0.2 การทดสอบบน Mac ที่ใช้ Intel และรัน Python 3.14 ผ่าน Rosetta ได้ผลเช่นนี้พอดี: “Successfully installed” ไม่มีคำเตือน และได้ 0.0.2 อยู่ภายใน

Mac ที่ใช้ Intel ยังมีปัญหาอีกข้อ ตั้งแต่เดือนมิถุนายน 2026 ไลบรารี cryptography ที่ดึงมาเพื่ออ่าน PDF ออกมาโดยไม่มีไบนารีที่สร้างไว้ล่วงหน้าสำหรับโปรเซสเซอร์นี้ ทำให้ตัวติดตั้งพยายามสร้างจากซอร์สโค้ด เพิ่มแฟล็ก --prefer-binary ลงในคำสั่ง แล้วโปรแกรมจะใช้รุ่นก่อนหน้าที่มีแพ็กเกจไบนารีสำเร็จรูป ในการทดสอบบน Python 3.13 สำหรับ Intel วิธีนี้ติดตั้ง 0.1.8 และเปิด PDF ได้ แฟล็กนี้ติดตั้ง cryptography 48.0.1 ซึ่งมีช่องโหว่ที่ทราบแล้วสามรายการ ได้แก่ ในการถอดรหัส PKCS#7 และการตรวจสอบสายโซ่ใบรับรอง MarkItDown ใช้ไลบรารีนี้เฉพาะถอดรหัส PDF ที่เข้ารหัสไว้ และการอ่านเอกสารไม่ได้แตะส่วนเหล่านั้น

บน Python 3.15 การลดรุ่นเกิดขึ้นด้วยเหตุผลสองข้อ รุ่น 0.1.8 ระบุว่ารองรับเฉพาะ 3.10 ถึง 3.14 และยังไม่มีเอนจินสำหรับ 3.15 ผลการแก้ dependency ของตัวติดตั้งบน 3.15 ยืนยันเรื่องนี้: ทั้งคำสั่งพื้นฐานและคำสั่งที่ระบุรูปแบบติดตั้ง 0.0.2 เหมือนกัน

คำเตือนการลดรุ่นมีหน้าตาแบบนี้ โดยจะมีหนึ่งบรรทัดต่อส่วนเสริมแต่ละรายการในคำสั่ง:

WARNING: markitdown 0.0.2 does not provide the extra 'all'

บรรทัดนี้หายไปท่ามกลางบรรทัดดาวน์โหลดหลายสิบรายการ และไม่ได้บอกอะไรเกี่ยวกับรุ่นที่ถูกนำมาติดตั้งแทน หากใช้คำสั่งพื้นฐานที่ไม่มีส่วนเสริม จะไม่มีแม้แต่คำเตือน รายงานสุดท้ายกลับชื่นมื่นว่า “Successfully installed”

การติดตั้งโดยไม่ใส่ส่วนเสริมก็ไม่ใช่ทางแก้ แพ็กเกจพื้นฐานติดตั้งได้ แต่เปิด PDF ไม่ได้:

PdfConverter recognized the input as a potential .pdf file, but the
dependencies needed to read .pdf files have not been installed. To resolve
this error, include the optional dependency [pdf] or [all] when installing
MarkItDown. For example:

* pip install 'markitdown[pdf]'
* pip install 'markitdown[all]'

ตัวเครื่องมือเองแนะนำ [all] และคำแนะนำนั้นกลับมาใช้ได้อีกครั้งกับ 0.1.8 บน Python 3.14 และ 3.12 แต่ควรระบุรูปแบบเป็นชื่อ ๆ จะดีกว่า: [all] เพิ่มแพ็กเกจอีกราวสิบห้าแพ็กเกจและประมาณ 55 เมกะไบต์ รวมถึงไลบรารี Azure รุ่นก่อนเผยแพร่และสาย dependency ของ YouTube ที่เคยทำให้การติดตั้งพังมาแล้ว

ตัวติดตั้งจัดการไลบรารี Azure รุ่นก่อนเผยแพร่ให้เอง โดยปกติ pip จะข้ามรุ่นก่อนเผยแพร่ แต่ในกรณีนี้ข้อกำหนดระบุรุ่นก่อนเผยแพร่อย่างชัดเจน จึงติดตั้งรุ่นนั้น มีการทดสอบ pip สี่รุ่น ตั้งแต่ 23.2 ถึง 26.2 บน Python 3.12 และทุกรุ่นเลือก 0.1.8

โปรดทราบ

ทันทีหลังติดตั้ง ให้รัน markitdown --version ใช้เวลาเพียงห้าวินาที และเป็นวิธีเดียวที่จะรู้ว่าคุณติดตั้งสิ่งที่ต้องการแล้วจริง ๆ รายงานว่าติดตั้งสำเร็จไม่มีความหมายในกรณีนี้

ในเดือนสิงหาคม การติดตั้งใหม่ในสภาพแวดล้อมสะอาดอีกแห่งก็ได้ผลเช่นเดิม: 0.0.2 และคำว่า “Successfully”

มีรายละเอียดเชิงปฏิบัติบางอย่างที่ควรรู้ไว้ล่วงหน้า

แพ็กเกจค่อนข้างใหญ่: การติดตั้งพื้นฐานใช้พื้นที่ 143 เมกะไบต์ ส่วนการติดตั้งพร้อมสี่รูปแบบใช้ 303 เมกะไบต์ องค์ประกอบที่ใหญ่ที่สุดคือเครื่องตรวจจับชนิดไฟล์ ขนาด 81 เมกะไบต์ ซึ่งถูกติดตั้งแม้ในการติดตั้งพื้นฐาน เรื่องนี้ไม่เป็นปัญหากับแล็ปท็อป แต่มีผลกับฟังก์ชันคลาวด์ที่จำกัดขนาด

อย่าหวังพึ่ง mirror เป็นทางเลือกสำรอง mirror ที่ทดสอบมีดัชนีและมีไฟล์ MarkItDown แต่ขาด dependency ที่จำเป็นหนึ่งรายการ การติดตั้งจึงล้มเหลวทั้งบน Python 3.14 และ 3.12

เรื่องติดตั้งเป็นเรื่องเล็กเมื่อเทียบกับปัญหาหลัก บ่อยกว่ามากที่ AI สร้างข้อมูลไร้สาระเพราะสิ่งที่ผิด หรือการนำเสนอสิ่งนั้นในรูปแบบที่ผิด ถูกใส่เข้าไปในหน้าต่างบริบท ความสามารถในการตัดสินใจก่อนเริ่มงานว่าจะให้โมเดลเห็นอะไรเรียกว่าการออกแบบบริบท และการเตรียมเอกสารก็เป็นส่วนหนึ่งของเรื่องนี้

จะแปลงเอกสารแรกให้เป็นข้อความได้อย่างไร?

ประเด็นสำคัญ

ใช้คำสั่งเดียวในเทอร์มินัล: ชื่อโปรแกรมและพาธไฟล์ โดยค่าเริ่มต้นผลลัพธ์จะแสดงในหน้าต่าง คุณจึงบันทึกลงไฟล์ได้โดยตรง มีสามวิธี ได้แก่ ส่งผลลัพธ์ไปยังคอนโซล เขียนด้วยแฟล็ก หรือส่งไฟล์เป็นสตรีม หากต้องการฝังไว้ในสคริปต์ของคุณเอง มี wrapper Python สามบรรทัดที่รับ URL ได้ด้วย

วิธีที่สั้นที่สุด:

markitdown dogovor.docx

ข้อความจะแสดงในเทอร์มินัล หากต้องการบันทึกลงไฟล์ มีสองวิธี:

markitdown dogovor.docx -o dogovor.md
markitdown dogovor.docx > dogovor.md

ความแตกต่างแทบไม่มีบน Mac และ Linux แต่สำคัญบน Windows: การ redirect ด้วย > อาจทำให้โปรแกรมขัดข้องเมื่อเอาต์พุตมีข้อความซีริลลิก

คุณส่งไฟล์เป็นสตรีมได้ ในกรณีนั้นการบอกนามสกุลไฟล์จะเป็นประโยชน์:

cat dogovor.docx | markitdown -x docx

นี่คือแฟล็กหลักจากคำสั่งช่วยเหลือของรุ่น 0.1.8:

แฟล็กทำอะไร
-o, --outputเขียนผลลัพธ์ลงไฟล์แทนการแสดงในหน้าต่าง
-x, --extensionบอกนามสกุลเมื่อส่งไฟล์เป็นสตรีม
-m, --mime-typeบอกชนิดเนื้อหา
-c, --charsetบอกการเข้ารหัสอักขระ
-d, --use-docintelประมวลผลผ่านบริการคลาวด์แบบชำระเงินของ Microsoft
-v, --versionแสดงรุ่น

คำสั่งช่วยเหลือเดียวกันยังระบุแฟล็กที่มีประโยชน์อีกสามรายการ ซึ่งผ่านการทดสอบแล้วแต่ละรายการ: --list-plugins แสดงปลั๊กอินที่ติดตั้งไว้, -p เปิดใช้ปลั๊กอินเหล่านั้นสำหรับการรันครั้งหนึ่ง และ --keep-data-uris เก็บภาพที่ฝังอยู่ในเอกสารไว้ในเอาต์พุต (โดยค่าเริ่มต้นภาพจะถูกตัดออก) รายการที่เหลือเป็นการตั้งค่าสำหรับบริการคลาวด์ของ Microsoft

wrapper Python ใช้สามบรรทัด:

from markitdown import MarkItDown

md = MarkItDown()
print(md.convert("ostatki.xlsx").text_content)

คำสั่งเดียวกันรับ URL ได้ด้วย หน้าเว็บเรียบง่ายหน้าหนึ่งคืนข้อความสะอาด 167 อักขระ ซึ่งมีหัวข้อและลิงก์ แต่ไม่มีเมนูและส่วนท้าย:

r = md.convert("https://example.com")

MarkItDown เข้าใจรูปแบบไฟล์ใดบ้าง และในทางปฏิบัติหมายความว่าอย่างไร?

ประเด็นสำคัญ

คำอธิบายโปรเจกต์ระบุรูปแบบไว้หลากหลาย: ไฟล์ Office, PDF, ภาพ, เสียง, ไฟล์บีบอัด, ลิงก์ YouTube และอีบุ๊ก มีสามรายการที่ไม่ได้ทำงานตามที่ฟังดูเหมือนจะทำได้ เวอร์ชันฟรีไม่มีการรู้จำข้อความในภาพเลย เสียงพูดถูกส่งไปยังเอนจินภาษาอังกฤษ และไฟล์ที่แยกวิเคราะห์ไม่ได้จะหายไปจากไฟล์บีบอัดโดยไม่มีคำเตือน

ตารางสรุปสิ่งที่กล่าวอ้างและความหมายในทางปฏิบัติ

รูปแบบระบุว่ารองรับสิ่งที่เกิดขึ้นจริง
Word, Excel, งานนำเสนอใช่ทำงานเรียบร้อย นี่คือจุดแข็ง
CSV, JSON, XML, HTMLใช่ใช้ได้ แต่ CSV มีปัญหาเรื่องตัวคั่น
PDFใช่ขึ้นอยู่กับเลย์เอาต์: จัดข้อความหนึ่งคอลัมน์ได้ แต่สองคอลัมน์พัง
ภาพ“เมทาดาทาและการรู้จำ”ไม่มีการรู้จำ มีเพียงเมทาดาทาหรือโมเดลภาพแบบชำระเงิน
เสียง“ถอดเสียงพูด”ส่งไปยังเอนจินภาษาอังกฤษของ Google
ไฟล์ ZIP“ไล่ดูเนื้อหาภายใน”สิ่งที่แยกวิเคราะห์ไม่ได้จะหายไปโดยเงียบ ๆ
ลิงก์ YouTubeใช่เฉพาะลิงก์เต็มรูปแบบ '<OFFICIAL_URL>'?...
อีบุ๊ก EPUBใช่ใช้งานได้

สามเรื่องที่ควรดูละเอียดขึ้น

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

เสียง มีบริการถอดเสียงพูด แต่ไม่ได้ส่งภาษาที่ใช้ไปด้วย และเอนจินคาดว่าจะเป็นภาษาอังกฤษโดยค่าเริ่มต้น นอกจากนี้ยังเรียกใช้ endpoint ฟรีที่ไม่เป็นทางการของ Google ซึ่งจำกัดไว้ประมาณห้าสิบคำขอต่อวันต่อคีย์

ไฟล์บีบอัด โปรแกรมแตกไฟล์ ZIP แล้วไล่ดูไฟล์ด้านใน จากนั้นนำผลลัพธ์มาต่อกัน หากแยกวิเคราะห์ไฟล์ใดไม่ได้ ข้อผิดพลาดจะถูกดักไว้และระงับ ไฟล์นั้นจะไม่ปรากฏในผลลัพธ์ และคุณจะไม่รู้ว่ามันหายไป

เกิดอะไรขึ้นกับเอกสารที่มีข้อความซีริลลิก?

ประเด็นสำคัญ

นำไฟล์สามไฟล์ที่มีข้อความซีริลลิก ได้แก่ สัญญา Word, แผ่นรายการสินค้าคงคลังใน Excel และงานนำเสนอ ไปประมวลผลด้วยรุ่นล่าสุด ข้อความซีริลลิกและตัวเลขยังอยู่ครบทั้งสามไฟล์ ปัญหาเกิดขึ้นสามจุด: ไฟล์ CSV ที่ใช้เครื่องหมายอัฒภาค การจัดรูปแบบสกุลเงินในเซลล์ Excel และเอาต์พุตคอนโซล Windows ทั้งสามกรณีมีวิธีแก้ปัญหาเฉพาะหน้า

ไฟล์ด้านล่างสร้างขึ้นเพื่อการทดสอบโดยเฉพาะ ข้อมูลเป็นข้อมูลสมมติ

แผ่นรายการสินค้าคงคลังใน Excel ออกมาเรียบร้อยเช่นกัน โดยชื่อชีตกลายเป็นหัวข้อ:

## Stock
| Item | In stock | Reserved | Available |
| --- | --- | --- | --- |
| Coffee beans, kg | 420 | 38 | 382 |
| Loose-leaf tea, kg | 180 | 52 | 128 |

งานนำเสนอถูกแปลงเป็นข้อความ โดยมีหมายเลขสไลด์เป็นคำอธิบายประกอบและชื่อสไลด์เป็นหัวข้อ ข้อความซีริลลิกก็ยังอยู่ครบเช่นกัน ข้อกล่าวอ้างเหมารวมว่า “MarkItDown ไม่เข้าใจภาษาซีริลลิก” จึงไม่เป็นความจริง

ต่อไปคือสามจุดที่มีปัญหาจริง

CSV ที่ใช้เครื่องหมายอัฒภาค นำไฟล์ส่งออกใบแจ้งหนี้สองไฟล์ที่เหมือนกันมาทดสอบเปรียบเทียบ ไฟล์ที่ใช้จุลภาคได้ตารางสี่คอลัมน์ถูกต้อง ส่วนไฟล์ที่ใช้เครื่องหมายอัฒภาคนำทั้งบรรทัดไปใส่ไว้ในเซลล์เดียว

ทั้งบรรทัดลงเอยอยู่ในเซลล์เดียว การเข้ารหัสถูกตรวจจับได้ถูกต้องและไม่มีข้อผิดพลาด แฟล็ก -c ก็ช่วยไม่ได้ โมเดลจะได้รับตารางนี้แต่ไม่เข้าใจว่าค่าใดคือยอดเงินและค่าใดคือสถานะ ส่งออกใหม่โดยระบุตัวคั่นจุลภาคและ encoding ที่ถูกต้อง เก็บต้นฉบับเดิมไว้ ห้ามแทนอัฒภาคทั้งไฟล์ เพราะในข้อความที่มีเครื่องหมายคำพูดหรือรูปแบบเลขทศนิยมอาจเป็นส่วนของค่า หากส่งออกใหม่ไม่ได้ ให้ parse ด้วยตัวคั่นจริงและเขียน CSV ใหม่ด้วย writer ที่รู้รูปแบบ CSV เพื่อคง quoting กับค่าเซลล์ ก่อนวิเคราะห์ให้เทียบจำนวนคอลัมน์ แถว และยอดตรวจสอบกับไฟล์ต้นทาง

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

คอนโซล Windows โปรแกรมอาจขัดข้องเมื่อใช้ไฟล์ที่มีอักขระนอกอักษรละติน

ร่องรอยข้อผิดพลาดแสดงการเข้ารหัส cp1251 ซึ่งหมายถึงคอนโซล Windows ตัวเอกสารแยกวิเคราะห์ได้ถูกต้อง สิ่งที่ล้มเหลวคือการพิมพ์ผลลัพธ์ในหน้าต่างเทอร์มินัล จึงมีวิธีแก้ปัญหาเฉพาะหน้าสองแบบ:

markitdown dogovor.docx -o dogovor.md
$env:PYTHONUTF8 = "1"; markitdown dogovor.docx > dogovor.md

วิธีแรกข้ามคอนโซลไปเลย ส่วนวิธีที่สองทำให้ Python เขียนเป็น UTF-8 มีคนส่งแพตช์แก้ปัญหานี้ในตัวเครื่องมืออย่างน้อยหกครั้ง: ข้อเสนอส่วนหนึ่งถูกปิดโดยไม่ได้ merge ส่วนที่เหลือยังเปิดอยู่ ดังนั้นคุณต้องใช้วิธีแก้ปัญหาเฉพาะหน้า

อาการที่สี่พบใน PDF: มีข้อความอย่าง (cid:1090) แทนตัวอักษร แสดงว่าไฟล์มีตารางฟอนต์ที่ไม่ได้มาตรฐานและไม่สามารถถอดรหัสอักขระได้ การประมวลผลเอกสารเช่นนี้ด้วย MarkItDown ไม่มีประโยชน์ คุณต้องใช้เครื่องมืออื่น

ทำไม PDF จึงออกมาเป็นข้อมูลยุ่งเหยิง?

ประเด็นสำคัญ

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

ในการทดสอบ นำบทความวิทยาศาสตร์ขนาด 2.16 เมกะไบต์ที่มีสองคอลัมน์มาประมวลผล รหัสออกเป็นศูนย์ หลังจาก 0.9 วินาที เอาต์พุตมี 88,000 อักขระ ซึ่งเกือบทั้งหมดเป็นข้อมูลไร้สาระ ตัวเลข 88,000 อักขระทำให้รู้สึกว่าทุกอย่างทำงาน จนกว่าจะเปิดไฟล์ดู:

|     | Hybrid |          | OCR-LLM     |     | Framework  |
| --- | ------ | -------- | ----------- | --- | ---------- |
...
Informationextractionfromcopy-heavydoc-
5202 tcO 11  ]LC.sc[  1v83101.0152:viXra

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

แล้วก็ถึงส่วนที่น่าขัน บทความที่ใช้ทดสอบกลับกลายเป็นงานชิ้นเดียวกับที่วัดประสิทธิภาพ MarkItDown และเปรียบเทียบกับเครื่องมืออื่น เครื่องมือแปลงย่อหน้าที่รายงานผลการวัดของตัวเองให้กลายเป็นข้อความนี้:

cues. This name-matching error could be miti-  OCRpreprocessingoverhead(0.056s),whileDo-
gatedthroughpromptengineeringtoprovidemore  clingandMinerUadoptmorecomputationallyin-
explicit matching instructions or fine-tuning the  tensive strategies with OCR latencies of approxi-

คอลัมน์ซ้ายและขวาถูกนำมาต่อกันทีละบรรทัด โมเดลที่ได้รับข้อความนี้จะอ่านครึ่งประโยคจากย่อหน้าหนึ่งและอีกครึ่งจากอีกย่อหน้าหนึ่ง

สาเหตุเป็นเรื่องทางเทคนิคและเข้าใจง่าย Word ระบุอย่างชัดเจนว่า “นี่คือหัวข้อ” และ “นี่คือเซลล์ในตาราง” ส่วน PDF ระบุว่า “นี่คือตัวอักษร” และ “นี่คือพิกัดของมันบนหน้า” การสร้างโครงสร้างขึ้นใหม่จากพิกัดเป็นงานที่แยกต่างหากและยาก MarkItDown แทบไม่ได้พยายามทำเลย ซอร์สโค้ดสำหรับแยกวิเคราะห์ PDF ไม่มีการตรวจจับหัวข้อ หากตรวจไม่พบว่าหน้าเป็นแบบฟอร์มหรือตาราง เอกสารทั้งฉบับจะผ่านการดึงข้อความขั้นพื้นฐาน

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

เครื่องมือไม่พบหัวข้อใน PDF เลยแม้แต่หัวข้อเดียว ตรงกับที่ซอร์สโค้ดแสดง

ตัวเลข “MarkItDown มีความแม่นยำ 82%” ปรากฏอยู่บนอินเทอร์เน็ตโดยไม่มีระเบียบวิธี เมื่อไล่กลับไปยังแหล่งต้นฉบับก็ไม่พบอะไร: สายโซ่ลิงก์จบลงที่หน้าซึ่งโหลดไม่ได้ จึงใช้เป็นผลการวัดไม่ได้

จะเกิดอะไรขึ้นกับสัญญาที่สแกนมา?

ประเด็นสำคัญ

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

พฤติกรรมนี้อันตรายกว่าปัญหาอื่น เพราะไม่ดูเหมือนความล้มเหลว

เพื่อทดสอบ มีการสร้าง PDF จากภาพที่มีข้อความ ซึ่งก็คือสิ่งที่ได้เมื่อถ่ายภาพหรือสแกนสัญญา ทดสอบซ้ำเพื่อไม่ให้เป็นผลจากความบังเอิญ:

อินพุตรหัสออกจำนวนอักขระในเอาต์พุตข้อความผิดพลาด
PDF จากภาพ รอบที่ 100ไม่มี
PDF จากภาพ รอบที่ 200ไม่มี
ไฟล์ภาพ PNG โดยตรง01 (ขึ้นบรรทัดใหม่)ไม่มี

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

โปรดทราบ

หากประมวลผลเอกสารเป็นชุด ให้ตรวจความยาวของเอาต์พุต รหัสออกบอกอะไรไม่ได้เลย: ไฟล์ว่างที่มีรหัสออกเป็นศูนย์คือสิ่งที่เกิดขึ้นกับงานสแกน

มีวิธีแก้ปัญหาเฉพาะหน้าสองแบบ และทั้งคู่มีค่าใช้จ่าย แบบแรกคือแฟล็ก -d ซึ่งส่งเอกสารไปยังบริการรู้จำบนคลาวด์ของ Microsoft ข้อความช่วยเหลือของแฟล็กระบุชัดเจนว่าต้องมี endpoint ของบริการที่ถูกต้อง แบบที่สองคือแพ็กเกจเสริมแยกต่างหากที่ส่งหน้าเอกสารไปยังโมเดลภาพโดยใช้คีย์ของคุณ คุณจึงจ่ายเงินให้ผู้ให้บริการโมเดลต่อหน้า ตั้งแต่เดือนเมษายน 2026 มีรายงานในการอภิปรายที่ยังเปิดอยู่เกี่ยวกับวิธีที่สองว่า ประมวลผลเฉพาะหน้าแรกของเอกสารสแกนหลายหน้า

คุณยังรันโมเดลรู้จำบนเครื่องของตัวเองได้ แต่นั่นเป็นอีกโปรเจกต์หนึ่ง

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

อัปโหลดไฟล์ไปยังตัวแปลงออนไลน์ได้เลยหรือไม่?

ประเด็นสำคัญ

ในทางเทคนิคทำได้ มีเว็บไซต์มากมายที่ใช้ชื่อนี้ แต่ไม่มีเว็บไซต์ใดเกี่ยวข้องกับ Microsoft คุณตรวจสอบคำกล่าวอ้างว่า “ไฟล์ไม่เคยออกจากเบราว์เซอร์” ได้ด้วยการคลิกเพียงครั้งเดียว และคำกล่าวอ้างนี้ก็ไม่จริงเสมอไป ก่อนอัปโหลดสัญญาหรือไฟล์ส่งออกที่มีชื่อบุคคล ให้ตรวจสอบด้วยตัวเองว่าไฟล์ถูกส่งไปที่ใด

“MarkItDown online” เป็นหนึ่งในคำแนะนำการค้นหาที่พบบ่อยที่สุด และมีเว็บไซต์ที่ให้บริการนี้ เครื่องมือดั้งเดิมของ Microsoft ไม่มีเว็บไซต์เลย มีให้ใช้เฉพาะในรูปแบบโปรแกรมที่คุณติดตั้งเองเท่านั้น สิ่งใดก็ตามที่ใช้ชื่อคล้ายกันและเปิดในเบราว์เซอร์ย่อมสร้างโดยคนอื่น

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

โปรดทราบ

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

นี่คือเหตุผลที่ MarkItDown มีคุณค่าในที่ที่ห้ามส่งเอกสารออกนอกองค์กร ในการอภิปรายหนึ่ง มีคนเล่าสถานการณ์ของตนว่า โปรแกรมทั่วไปถูกห้ามบนแล็ปท็อปที่ทำงาน แต่อนุญาตให้ใช้ไลบรารี Python ได้ และยูทิลิตีที่ทำงานในเครื่องกลายเป็นทางเลือกเดียวที่ใช้ได้

MarkItDown ช่วยประหยัดได้จริงแค่ไหน?

ประเด็นสำคัญ

ประโยชน์หลักคือทำให้โมเดลเข้าใจเอกสารได้ตั้งแต่แรก นอกจากนี้ยังมีความแตกต่างด้านขนาด: เมื่อเปรียบเทียบขนาดมาร์กอัปภายในไฟล์ Office กับขนาดข้อความที่ดึงออกมา จะเห็นว่าขนาดลดลงห้าถึงเจ็ดเท่า นอกจากนี้ยังตัดสิ่งที่โมเดลไม่จำเป็นต้องอ่านออกไปทั้งหมด เช่น คำอธิบายฟอนต์ ระยะขอบ และสีของเซลล์

ไฟล์ Office เป็นคลังไฟล์ที่มีโครงสร้างและบรรจุมาร์กอัป หากแตกไฟล์ทดสอบทั้งสามแล้วเปรียบเทียบขนาดของส่วนที่มีเนื้อหากับขนาดเอาต์พุต จะได้ผลดังนี้:

ไฟล์มาร์กอัปภายในข้อความที่ดึงออกมาเล็กลงกี่เท่า
สัญญา Word3,701 ไบต์711 ไบต์5.2
สเปรดชีต Excel1,561 ไบต์262 ไบต์6.0
งานนำเสนอ2,203 ไบต์296 ไบต์7.4

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

ผู้พัฒนาเองก็พูดถึงการประหยัดด้วย: คำอธิบายโปรเจกต์ระบุเจาะจงว่าธรรมเนียมของ Markdown ประหยัดอักขระมาก เรื่องนี้จริง แต่ไม่ควรเป็นจุดขายหลัก ความแตกต่างระหว่าง “โมเดลได้รับสามพันอักขระแทนที่จะเป็นหนึ่งหมื่นห้าพัน” กับ “โมเดลได้รับโครงสร้างที่ชัดเจนแทนที่จะเป็นข้อมูลปะปนกัน” อยู่คนละระดับ แบบแรกช่วยประหยัดเงิน แบบที่สองเป็นตัวกำหนดว่าคำตอบจะสมเหตุสมผลหรือไม่

หากกังวลเรื่องการใช้บริบท มีบทความแยกต่างหากอธิบายไว้: โทเคนใน Claude ถูกใช้ไปที่ไหน และแต่ละแผนมีโทเคนรวมอยู่เท่าใด

เชื่อมต่อ MarkItDown กับ Claude ผ่าน MCP อย่างไร?

ประเด็นสำคัญ

โปรเจกต์มีแพ็กเกจแยกต่างหากที่เปิดเซิร์ฟเวอร์ MCP ด้วยคำสั่งเดียว: ระบุพาธไฟล์แล้วรับข้อความกลับมา ในเดือนกันยายน 2026 แพ็กเกจได้รับการอัปเดตเป็น 0.0.1a7 ในที่สุด แต่บิลด์ยังเป็นรุ่นก่อนเผยแพร่และส่งข้อมูล telemetry ไปยัง Microsoft โดยค่าเริ่มต้น คำสั่งด้านล่างเชื่อมต่อผ่าน uv โดยกำหนดรุ่นไว้ ใช้ Python 3.12 และปิด telemetry ไม่มีการยืนยันตัวตน และตามเอกสารของแพ็กเกจเอง เซิร์ฟเวอร์อ่านไฟล์ใดก็ได้ที่ผู้ใช้ซึ่งเปิดใช้งานเซิร์ฟเวอร์เข้าถึงได้

MCP เป็นวิธีมอบเครื่องมือภายนอกให้ AI ซึ่ง AI นำไปใช้เองได้ ดูภาพรวมกลไกและเซิร์ฟเวอร์อื่น ๆ ได้ในรีวิวเซิร์ฟเวอร์ MCP สำหรับ Claude Code

เซิร์ฟเวอร์ MarkItDown เปิดให้ใช้เครื่องมือเดียวเท่านั้น: แปลงเอกสารเป็นข้อความ โดยรับพาธไฟล์ในเครื่อง URL ของหน้าเว็บ หรือข้อมูลที่ฝังมากับคำขอโดยตรง

เชื่อมต่อกับ Claude Code ด้วยคำสั่งเดียว โดยกำหนดรุ่นของเซิร์ฟเวอร์ไว้ คุณต้องมีตัวจัดการแพ็กเกจ uv:

claude mcp add --scope user --env 'ORT_DISABLE_TELEMETRY=1' --env 'UV_PYTHON=3.12' --transport stdio markitdown -- uvx markitdown-mcp@0.0.1a7
claude mcp list

คำตอบจากคำสั่งที่สองควรแสดง “Connected” สำหรับ markitdown การเปิดใช้งานครั้งแรกดาวน์โหลดประมาณเจ็ดสิบแพ็กเกจและใช้เวลาสูงสุดหนึ่งนาที หลังจากนั้นเซิร์ฟเวอร์จะเริ่มทำงานในหนึ่งถึงหนึ่งวินาทีครึ่ง

ต่อไปนี้คือข้อควรระวัง ซึ่งแต่ละข้อผ่านการตรวจสอบด้วยมือแล้ว

บิลด์ 0.0.1a7 ออกเมื่อวันที่ 14 กันยายน 2026 ก่อนหน้านั้นเซิร์ฟเวอร์ค้างอยู่ที่ 0.0.1a4 ตั้งแต่เดือนพฤษภาคม 2025 นานกว่าหนึ่งปี หมายเลขรุ่นล่าสุดยังเป็นรุ่นก่อนเผยแพร่

ไม่สามารถติดตั้งได้บนทุกระบบที่มี Python รุ่นใหม่ เอนจิน onnxruntime ที่เป็น dependency มีให้สำหรับ Python 3.14 บน Mac เฉพาะ Apple Silicon ที่ใช้ macOS 14 ขึ้นไป การติดตั้งจึงล้มเหลวบน Mac ที่ใช้ Intel และบน macOS 13 หรือต่ำกว่าเมื่อใช้ Python 3.14 บน Mac ที่ใช้ Apple Silicon มีการรันเซิร์ฟเวอร์ด้วย Python 3.14, 3.13 และ 3.12 และติดตั้งได้ครบทั้งสามรุ่น คำสั่งใช้ UV_PYTHON=3.12: มีแพ็กเกจไบนารีสำเร็จรูปสำหรับ 3.12 บน Windows, Linux และ Mac ที่ใช้ Apple Silicon และหากคุณไม่มี Python รุ่นนี้ uv จะดาวน์โหลดให้ แต่ Mac ที่ใช้ Intel ก็มีข้อควรระวังเช่นกัน: uv จะสร้างไลบรารี cryptography จากซอร์สโค้ด เพราะตั้งแต่เดือนมิถุนายน 2026 ไม่มีแพ็กเกจไบนารีสำเร็จรูปสำหรับ Intel การติดตั้งใช้เวลานานขึ้นและอาจล้มเหลว

รุ่นของ MarkItDown ที่ติดตั้งภายในขึ้นอยู่กับรุ่นของ uv ตั้งแต่ MarkItDown 0.1.6 เป็นต้นไป ส่วนเสริม [all] ต้องใช้ไลบรารี Azure รุ่นก่อนเผยแพร่: uv 0.12 ขึ้นไปติดตั้งไลบรารีดังกล่าวและ MarkItDown 0.1.8 รุ่นล่าสุด ส่วน uv รุ่นเก่าจะลดรุ่นไปเป็น 0.1.5 ตรวจรุ่น uv ด้วย uv --version

มีข้อมูลสองอย่างถูกส่งออกนอกเครื่อง อย่างแรกคือ telemetry: บน Mac และ Linux เอนจิน onnxruntime ภายในเซิร์ฟเวอร์ส่งข้อมูลดังกล่าวไปยัง Microsoft โดยค่าเริ่มต้น ตัวแปร ORT_DISABLE_TELEMETRY=1 ในคำสั่งจะปิดมัน ในการทดสอบ เซิร์ฟเวอร์เชื่อมต่อกับ endpoint telemetry ของ Microsoft หากไม่กำหนดตัวแปรนี้ เมื่อกำหนดตัวแปรแล้วไม่มีการเชื่อมต่อเลยขณะประมวลผลไฟล์จากดิสก์

อย่างที่สองคือเสียง เซิร์ฟเวอร์ส่งไฟล์ WAV, MP3, M4A และ MP4 ไปยังบริการรู้จำเสียงพูดของ Google เพื่อถอดเสียงผ่าน HTTP ปกติโดยไม่มีการเข้ารหัส ควรหลีกเลี่ยงการส่งไฟล์บันทึกเสียงสนทนากับลูกค้าผ่านบริการนี้

เอกสารขนาดใหญ่ส่งผ่านไม่ได้ การอภิปรายที่ยังเปิดอยู่กล่าวถึงการตอบกลับจากเซิร์ฟเวอร์ขนาด 51,000 โทเคน ซึ่งชนขีดจำกัด 25,000 โทเคน และเครื่องมือไม่แบ่งไฟล์ออกเป็นส่วน ๆ

และเรื่องความปลอดภัย เอกสารของแพ็กเกจระบุไว้อย่างตรงไปตรงมาว่า:

เซิร์ฟเวอร์ไม่รองรับการยืนยันตัวตนและทำงานด้วยสิทธิ์ของผู้ใช้ที่เปิดใช้งานเซิร์ฟเวอร์ เครื่องมือแปลงสามารถใช้เพื่ออ่านไฟล์ใดก็ได้ที่ผู้ใช้เซิร์ฟเวอร์เข้าถึงได้ หรือข้อมูลใด ๆ บนเครือข่าย

— Microsoft, คำอธิบายแพ็กเกจ markitdown-mcp (แปลแล้ว), https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp

กล่าวอีกอย่างคือ เอเจนต์ที่มีเครื่องมือนี้อ่านทุกอย่างที่คุณอ่านได้ เรื่องนี้ยอมรับได้เมื่อทำงานบนเครื่องของตัวเอง แต่ห้ามเปิดเผยเซิร์ฟเวอร์ต่อสาธารณะหรือมอบให้เอเจนต์ที่ไม่น่าเชื่อถือ

โปรดทราบ

เอกสารของโปรเจกต์ไม่มีการตั้งค่าที่ระบุไว้สำหรับ Claude Code โดยเฉพาะ — อธิบายเฉพาะ Claude Desktop และการเปิดใช้งานผ่านคอนเทนเนอร์ หากพบการตั้งค่าพร้อมใช้บนอินเทอร์เน็ตที่ระบุว่า “มาจากเอกสารทางการ” สำหรับ Claude Code โปรดทราบว่าไม่มีการตั้งค่าแบบนั้นในรีโพซิทอรี

สำหรับงานทั่วไป การเรียกโปรแกรมด้วยคำสั่งแล้วนำข้อความที่ได้ไปวางไว้ในโปรเจกต์ทำได้ง่ายกว่า ไฟล์จะอยู่ข้าง ๆ เอกสารอื่น ซึ่งโมเดลสามารถนำไปดูเองได้

เมื่อใดควรเลือกใช้เครื่องมืออื่นอย่างตรงไปตรงมามากกว่า?

ประเด็นสำคัญ

หลักการง่าย ๆ: หากโครงสร้างบันทึกไว้ในไฟล์อยู่แล้ว ให้ใช้ MarkItDown เพราะเร็วที่สุดและฟรี หากต้องสร้างโครงสร้างขึ้นใหม่จากภาพหน้ากระดาษ ให้ใช้เครื่องมือที่มีโมเดลเลย์เอาต์ Docling จัดการตารางและเลย์เอาต์ซับซ้อน MinerU จัดการสูตรและหลายคอลัมน์ ส่วนบริการคลาวด์แบบชำระเงินช่วยได้เมื่อไม่มีเวลาปรับแต่ง

เปรียบเทียบตามงานที่ต้องทำ จำนวนดาวบน GitHub ไม่เกี่ยวข้อง:

เครื่องมือจุดแข็งสิ่งที่ต้องแลก
MarkItDownไฟล์ Office, ความเร็ว, ฟรีจัดการ PDF ซับซ้อนหรือไฟล์สแกนไม่ได้
Doclingตารางและเลย์เอาต์ผ่านโมเดลเฉพาะทางหลายสิบวินาทีต่อเอกสาร
MinerUหลายคอลัมน์, สูตร, ตารางหนาแน่นติดตั้งยากกว่า
Markerความแม่นยำสูง, สูตร, ภาพประกอบต้องใช้การ์ดกราฟิก และสัญญาอนุญาตจำกัดรายได้
unstructuredส่งคืนโครงสร้างเอกสารเป็นส่วน ๆ พร้อมคำอธิบายใช้เอาต์พุตได้ยากกว่า
ตัวแยกวิเคราะห์บนคลาวด์ไม่ต้องตั้งค่าค่าใช้จ่ายและการส่งเอกสารออกนอกเครื่อง

มีรายละเอียดเกี่ยวกับ Marker ที่บทความเปรียบเทียบมักละไว้ ตั้งแต่เดือนกรกฎาคม 2026 ตัวโค้ดอยู่ภายใต้สัญญาอนุญาตแบบผ่อนปรน ส่วน weights ของโมเดลอยู่ภายใต้สัญญาอนุญาตแยกต่างหากที่มีเกณฑ์จำกัด: ใช้ได้ฟรีหากบริษัทมีรายได้ไม่เกินห้าล้านดอลลาร์ และระดมทุนได้ไม่เกินจำนวนเดียวกันในปีก่อนหน้า อีกข้อหนึ่งห้ามผู้ที่สร้างผลิตภัณฑ์คู่แข่งนำไปใช้ เรื่องนี้ไม่สำคัญกับผู้อ่านส่วนใหญ่ แต่เป็นเหตุผลให้ธุรกิจที่กำลังเติบโตอ่านสัญญาอนุญาตก่อนนำไปใช้

นั่นนำไปสู่ขั้นตอนทำงานจริงสี่ขั้น:

  1. ประมวลผลทุกอย่างด้วย MarkItDown เพราะฟรีและใช้เวลาแทบจะทันที
  2. เปิดผลลัพธ์และตรวจสอบขนาด
  3. หากข้อความสมเหตุสมผล งานก็เสร็จ ไม่ต้องทำอย่างอื่น
  4. หากเอาต์พุตยุ่งเหยิงหรือว่างเปล่า ให้นำไฟล์นั้นไปประมวลผลด้วยเครื่องมือที่หนักกว่า

วิธีนี้ทำให้คุณเสียเวลาและรับความซับซ้อนเพิ่มเฉพาะกับเอกสารที่จำเป็นต้องใช้เท่านั้น

นำ MarkItDown มาใช้ในขั้นตอนการทำงานอย่างไร?

ประเด็นสำคัญ

Anthropic เองระบุหลักการนี้ไว้ในคำอธิบายสกิลของตน: ใช้เครื่องมือนี้อ่านเอกสาร อย่าวางแผนแก้ไขโดยอาศัยผลจากเครื่องมือนี้ ต่อไปนี้คือสามสถานการณ์ที่เห็นผลตั้งแต่การรันครั้งแรก: แยกวิเคราะห์เอกสารคล้ายกันเป็นชุด เพิ่มเอกสารอ้างอิงถาวรให้โปรเจกต์ AI เพียงครั้งเดียว และเตรียมไฟล์ส่งออกจากระบบบัญชีเพื่อวิเคราะห์

Anthropic ใช้ MarkItDown ในสกิลสำเร็จรูปสำหรับทำงานกับไฟล์ Office และสกิลเหล่านั้นระบุขอบเขตที่คุณควรนำไปใช้ไว้อย่างครบถ้วน:

ตรวจสอบชีตอย่างรวดเร็ว: markitdown file.xlsx ไม่มีพิกัดเซลล์ ดังนั้นอย่าวางแผนแก้ไขโดยอาศัยผลนี้

— Anthropic, คำอธิบายสกิลสำหรับทำงานกับตาราง (แปลแล้ว), https://github.com/anthropics/skills/blob/main/skills/xlsx/SKILL.md

การอ้างอิงเซลล์และหน้าจะหายไปจากข้อความ จึงใช้ข้อความนี้แก้ไขไฟล์ต้นฉบับไม่ได้ ต่อไปนี้คือสามสถานการณ์

เอกสารคล้ายกันเป็นชุด เช่น ใบรับรอง ใบแจ้งหนี้ แบบฟอร์ม และใบสมัคร ใส่ไว้ในโฟลเดอร์แล้วรันด้วยบรรทัดเดียว:

for f in dokumenty/*.docx; do markitdown "$f" -o "text/$(basename "$f" .docx).md"; done

จากนั้นให้โมเดลใช้โฟลเดอร์ที่มีไฟล์ข้อความและขอให้รวบรวมข้อมูลที่เกี่ยวข้องลงในตาราง วิธีนี้ใช้ได้กับไฟล์ดิจิทัล ส่วนไฟล์สแกนจะล้มเหลว และคุณจะสังเกตได้ทันทีจากขนาดที่เป็นศูนย์

เอกสารอ้างอิงประจำโปรเจกต์ เช่น รายการราคา แม่แบบสัญญา นโยบาย และคำอธิบายบริการ แปลงเป็นข้อความครั้งเดียวแล้ววางไว้ข้าง ๆ โปรเจกต์ โมเดลจะอ่านได้ทุกครั้งที่มีคำขอ คุณจึงไม่ต้องแนบไฟล์เข้ากับบทสนทนาทุกครั้ง บทความเรื่องอัปโหลดไฟล์ไปยัง Claude อธิบายว่าการทำเช่นนี้ต่างจากการอัปโหลดไฟล์เข้าแชตอย่างไร

ไฟล์ส่งออกจากระบบบัญชี ไฟล์ส่งออก Excel จากซอฟต์แวร์บัญชีหรือบัญชีธนาคารกลายเป็นตารางภายในหนึ่งในสามวินาที และโมเดลคำนวณจากข้อมูลได้โดยไม่ต้องจัดการขั้นกลาง ตรวจว่า CSV ส่งออกหรือ parse ด้วยตัวคั่น quoting และ encoding จริง เทียบแถว คอลัมน์ และยอดตรวจสอบก่อนส่งโมเดล ห้ามปรับตัวคั่นด้วยค้นหาแล้วแทนที่ และระบุสกุลเงินชัดเจน เพราะสัญลักษณ์ที่อยู่เพียงรูปแบบเซลล์ Excel จะไม่ติดมากับข้อความ

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

หากต้องการเริ่มตอนนี้ ให้รัน pip install 'markitdown[pdf,docx,xlsx,pptx]' ประมวลผลสัญญา Word ฉบับแรกที่หาได้ แล้วตรวจสอบขนาดผลลัพธ์ ภายในครึ่งนาทีคุณจะรู้ว่ามันใช้กับไฟล์ของคุณได้หรือไม่

คำถามที่พบบ่อย

MarkItDown ฟรีหรือไม่?

ใช่ ใช้สัญญาอนุญาต MIT โดยไม่มีข้อจำกัดด้านการใช้เชิงพาณิชย์ คุณจ่ายเงินเฉพาะสองวิธีเสริม ได้แก่ การรู้จำผ่านคลาวด์ของ Microsoft ด้วยแฟล็ก -d และการสร้างคำอธิบายภาพด้วยโมเดลภาพโดยใช้คีย์ของคุณเอง ทุกอย่างที่เหลือทำงานฟรีบนเครื่องของคุณ

มีการส่งข้อมูลไปยังเซิร์ฟเวอร์หรือไม่?

สำหรับการแปลงไฟล์ Office และ PDF ตามปกติ ไม่มี ทุกอย่างประมวลผลในเครื่อง มีข้อยกเว้นสามกรณี: การถอดเสียงผ่านบริการของ Google แฟล็ก -d ส่งเอกสารไปยังคลาวด์ของ Microsoft และคำอธิบายภาพส่งไปยังโมเดลที่ใช้คีย์ของคุณ ไม่มีวิธีใดเปิดใช้งานโดยอัตโนมัติ

ทำไมจึงหา executable markitdown ไม่พบหลังติดตั้ง?

ส่วนใหญ่มักเกิดจากติดตั้งโปรแกรมไว้ในสภาพแวดล้อมที่ไม่ได้อยู่ใน search path ตรวจสอบพาธเต็มของไฟล์ภายในสภาพแวดล้อม อีกกรณีที่พบบ่อยคือคุณติดตั้งสำหรับ Python รุ่นหนึ่ง แต่เรียกใช้ด้วยอีกรุ่นหนึ่ง อีกกับดักหนึ่งคือ Python รุ่นต่ำกว่า 3.10 จะติดตั้งแพ็กเกจว่างเปล่าโดยไม่มีข้อผิดพลาดระหว่างติดตั้ง

ถ้าเห็น (cid:1090) และข้อความคล้ายกันแทนตัวอักษร ควรทำอย่างไร?

นี่คือตารางฟอนต์ที่ถอดรหัสไม่ได้ภายใน PDF การตั้งค่าแก้ไม่ได้ คุณต้องประมวลผลไฟล์ด้วยเครื่องมืออื่น เช่น Docling หรือ MinerU หากเป็นเอกสารที่ใช้ครั้งเดียว การคัดลอกข้อความด้วยตนเองจากโปรแกรมดูไฟล์จะเร็วกว่า

ประมวลผลไฟล์ทั้งโฟลเดอร์พร้อมกันได้ไหม?

ไม่มีโหมดสำหรับโฟลเดอร์โดยเฉพาะ แต่ทำได้ด้วยลูปเทอร์มินัลบรรทัดเดียว: for f in papka/*.docx; do markitdown "$f" -o "$f.md"; done อีกวิธีคือใส่ทุกอย่างลงใน ZIP แล้วส่งไฟล์บีบอัดให้โปรแกรม โปรแกรมจะประมวลผลเนื้อหาภายใน แต่ไฟล์ที่แยกวิเคราะห์ไม่ได้จะหายไปโดยไม่มีคำเตือน

เอาต์พุตต่างจากการคัดลอกข้อความด้วยมืออย่างไร?

เอาต์พุตรักษาโครงสร้างไว้ การคัดลอกให้ข้อความแบนราบที่แยกหัวข้อออกจากย่อหน้าไม่ได้ และทำให้ตารางพัง MarkItDown รักษาหัวข้อ รายการ และตารางไว้ โมเดลจึงแยกแยะได้ว่าอะไรคืออะไร ความแตกต่างมีน้อยสำหรับเอกสารสั้นฉบับเดียว แต่สำคัญมากเมื่อมีถึงยี่สิบฉบับ

MarkItDown เปิดเอกสารที่ป้องกันด้วยรหัสผ่านได้หรือไม่?

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

เมื่อพร้อมแล้ว มาทำความรู้จักกับ Ailoot

รายละเอียดเพิ่มเติม

คำถามที่พบบ่อย

แก้ CSV อัฒภาคด้วยการแทนอัฒภาคทุกตัวเป็นจุลภาคได้หรือไม่?

ไม่ได้ ข้อความในเครื่องหมายคำพูดและรูปแบบทศนิยมอาจมีอักขระเหล่านี้ ส่งออกใหม่ด้วยตัวคั่นที่ต้องการ หรือใช้ CSV parser และ writer ที่ระบุตัวคั่น encoding และ quoting แล้วเทียบคอลัมน์ แถว และยอดกับต้นฉบับ

exit code เป็นศูนย์แปลว่าแปลง PDF ได้มีประโยชน์หรือไม่?

ไม่ใช่ ตัวอย่างสแกนในบทความส่งผลว่างโดยไม่แจ้งผิดพลาด และ PDF ซับซ้อนให้ข้อความอ่านไม่ได้ เปิดผลตรวจความยาวกับโครงสร้าง และใช้เครื่องมือรักษา layout หรือ OCR เมื่อข้อความว่างหรือเสีย

บทความทั้งหมด