PHP + AI อ่านใบกำกับภาษี / ใบแจ้งหนี้ PDF แล้วดึงข้อมูลออกมา (OCR-free)
ผมเคยทำงานในบริษัทที่ทำธุรกิจการขนส่งสินค้าในปี 2026 เรามีปัญหาใหญ่มาก คือ ทุกครั้งที่ shipper ส่งเอกสารใบกำกับภาษี หรือใบแจ้งหนี้มาให้เรา ต้องมีทีมคนเก่งๆ หลายคนมานั่งอ่านทีละใบ แล้วดึงข้อมูลสำคัญออกมา เช่น เลขที่ใบกำกับภาษี, ชื่อผู้เสียภาษี, จำนวนเงิน, วันที่ออกเอกสาร มันใช้เวลานานมาก แถมยังเสี่ยงต่อความผิดพลาดได้ง่าย เพราะคนอ่านอาจจะอ่านผิดพลาด หรือพลาดข้อมูลบางอย่างไป ผมเองก็เคยเป็นส่วนหนึ่งของทีมนั้น และรู้ดีว่ามันเป็นงานที่น่าเบื่อสุดๆ แถมยังกินเวลาไปเยอะมาก
บทความนี้จะช่วยแก้ปัญหาเรื่องนั้นได้ โดยเราจะใช้ PHP ร่วมกับ AI (อย่าง Ollama) เพื่ออ่าน PDF ที่มีใบกำกับภาษี หรือใบแจ้งหนี้ แล้วดึงข้อมูลสำคัญออกมา โดยไม่ต้องใช้ OCR (Optical Character Recognition) แบบเดิมๆ ซึ่งปกติแล้ว OCR มักจะมีปัญหาเรื่องความแม่นยำ และต้องใช้เวลาในการปรับแต่งเยอะ แต่เราจะใช้ AI ที่สามารถเข้าใจภาษาได้โดยตรง ทำให้การดึงข้อมูลทำได้ง่ายขึ้น และแม่นยำกว่า
ติดตั้งและเตรียมความพร้อม
ก่อนที่จะเริ่มทำ เราต้องติดตั้งสิ่งจำเป็นดังต่อไปนี้:
- PHP: PHP 8.2 หรือสูงกว่า (แนะนำให้ใช้ PHP 8.3 เพื่อประสิทธิภาพสูงสุด)
- Ollama: Run Ollama AI Locally with PHP - No OpenAI Needed! (เวอร์ชันล่าสุด)
- PDF Parser: เราจะใช้ PDF Parser เพื่อแยกเนื้อหาจากไฟล์ PDF PDF Parser v2.13.0
- Composer: เครื่องมือจัดการ dependencies ของ PHP
ติดตั้ง Ollama ตามคู่มือของ Ollama เอง และติดตั้ง PDF Parser ด้วยคำสั่ง:
composer require pdfparser/pdfparser
php artisan require pdfparser/pdfparser
ขั้นตอนการดึงข้อมูลด้วย PHP และ Ollama
เราจะใช้ PHP ร่วมกับ Ollama เพื่อส่งไฟล์ PDF ไปให้ Ollama ประมวลผล และดึงข้อมูลออกมา เราจะใช้ PDF Parser เพื่อแยกเนื้อหาจากไฟล์ PDF ก่อน แล้วส่งเนื้อหาไปให้ Ollama ประมวลผล
- โหลด PDF Parser:
use PDFParser\TextExtractor; try { $text = TextExtractor::getText($pdfFilePath); } catch (\Exception $e) { echo "Error extracting text from PDF: " . $e->getMessage(); exit; } - ส่งข้อมูลไปให้ Ollama:
$prompt = "Extract the invoice number, date, and total amount from the following text:\n" . $text; $response = json_decode(file_get_contents("http://localhost:11434/api/generate", false, FILE_RETURNTRANSFER));คำอธิบาย: เราส่ง prompt ไปยัง Ollama โดย prompt จะเป็นคำสั่งให้ Ollama ดึงข้อมูลที่ต้องการออกมาจาก text ที่เราได้จาก PDF Parser เราใช้ `file_get_contents` เพื่อส่ง prompt ไปยัง Ollama และ `json_decode` เพื่อแปลง response กลับมาเป็น JSON
- ดึงข้อมูลจาก Ollama:
$extractedData = $response->{'data'}; print_r($extractedData);คำอธิบาย: เราดึงข้อมูลที่ Ollama ดึงออกมาจาก JSON response ข้อมูลที่ได้จะอยู่ในรูปแบบ array
ตัวอย่าง Output ที่ควรได้
{
"invoice_number": "INV-2026-12345",
"date": "2026-07-26",
"total_amount": "15000.00"
}
คำอธิบาย: Output ที่ได้จะเป็น JSON object ที่มีข้อมูลที่เราต้องการ เช่น เลขที่ใบกำกับภาษี, วันที่ออกเอกสาร, และจำนวนเงิน
Error ที่มักเจอและวิธีแก้
- Ollama ไม่ตอบสนอง: ตรวจสอบว่า Ollama รันอยู่จริง และสามารถเข้าถึงได้ผ่าน port 11434 ลอง restart Ollama หากจำเป็น
- Prompt ไม่ถูกต้อง: ปรับปรุง prompt ให้ชัดเจน และเฉพาะเจาะจงมากขึ้น ลองใช้ตัวอย่างข้อมูลใน prompt เพื่อให้ Ollama เข้าใจง่ายขึ้น
- PDF Parser ไม่สามารถแยกเนื้อหาได้: ตรวจสอบว่าไฟล์ PDF เป็น format ที่ PDF Parser รองรับ ลองใช้ PDF Parser เวอร์ชันใหม่กว่า
- ข้อมูลที่ดึงออกมาไม่ถูกต้อง: ปรับปรุง prompt ให้ละเอียดมากขึ้น ลองใช้เทคนิค few-shot learning โดยการใส่ตัวอย่างข้อมูลที่ถูกต้องใน prompt
สิ่งที่ควรระวัง / ข้อผิดพลาดที่เจอบ่อย
จากการทำงานจริง ผมพบว่าข้อผิดพลาดที่พบบ่อยที่สุดคือปัญหาเรื่อง format ของ PDF ที่ PDF Parser ไม่สามารถแยกเนื้อหาได้ถูกต้อง บางครั้ง PDF จะมี font หรือ layout ที่แปลกๆ ทำให้ PDF Parser อ่านไม่ออก นอกจากนี้ การปรับ prompt ให้ Ollama เข้าใจตรงกันก็เป็นเรื่องสำคัญมาก ถ้า prompt ไม่ชัดเจน Ollama อาจจะดึงข้อมูลที่ไม่ถูกต้อง หรือดึงข้อมูลออกมาไม่ได้เลย ผมเองก็เคยเจอสถานการณ์ที่ Ollama ดึงข้อมูลวันที่ผิด เพราะวันที่ใน PDF มี format ที่หลากหลาย เราต้องปรับ prompt ให้ Ollama รู้ว่าเราต้องการวันที่ในรูปแบบอะไร สุดท้ายคือเรื่องความแม่นยำของ AI เอง Ollama เป็น AI ดังนั้นมันก็มีโอกาสที่จะผิดพลาดได้ เราต้องตรวจสอบข้อมูลที่ได้จาก Ollama อย่างละเอียด
สรุปและขั้นตอนต่อไป
ผมคิดว่าการใช้ PHP ร่วมกับ AI เพื่ออ่านใบกำกับภาษี/ใบแจ้งหนี้ PDF แล้วดึงข้อมูลออกมา เป็นแนวทางที่น่าสนใจ และมีประโยชน์อย่างมาก วิธีนี้ช่วยลดเวลา และลดความผิดพลาดในการดึงข้อมูลได้ แต่ก็ต้องระวังเรื่อง format ของ PDF, prompt ที่ถูกต้อง, และความแม่นยำของ AI ด้วย
สำหรับขั้นตอนต่อไป ผมแนะนำให้เราทดลองทำตามขั้นตอนที่ผมได้อธิบายไป แล้วปรับปรุง code ให้เหมาะสมกับความต้องการของเรา เราสามารถใช้ library อื่นๆ ที่มีประสิทธิภาพสูงกว่า PDF Parser ได้ เช่น LLPhant หรือ php-llm นอกจากนี้ เรายังสามารถ integrate วิธีนี้เข้ากับระบบ workflow ของเรา เพื่อให้การดึงข้อมูลเป็นไปอย่างอัตโนมัติได้
คำถาม
คำถาม: ผมควรใช้ PDF Parser เวอร์ชันไหนดี? คำตอบ: PDF Parser เวอร์ชันล่าสุด (เวอร์ชัน 2.13.0 ในปัจจุบัน) เป็นเวอร์ชันที่แนะนำที่สุด เพราะมีการปรับปรุงประสิทธิภาพ และความแม่นยำให้ดีขึ้น
คำถาม: ผมควรปรับ prompt อย่างไรเพื่อให้ Ollama ดึงข้อมูลออกมาได้ถูกต้อง? คำตอบ: ให้ prompt ชัดเจน และเฉพาะเจาะจงมากที่สุด ใส่ตัวอย่างข้อมูลใน prompt และระบุ format ของข้อมูลที่ต้องการ
คำถาม: วิธีนี้เหมาะกับธุรกิจประเภทไหน? คำตอบ: วิธีนี้เหมาะกับธุรกิจที่ต้องจัดการเอกสารใบกำกับภาษี/ใบแจ้งหนี้จำนวนมาก เช่น ธุรกิจการขนส่งสินค้า, ธุรกิจค้าปลีก, และธุรกิจอื่นๆ ที่ต้องออกใบกำกับภาษี/ใบแจ้งหนี้ให้กับลูกค้าบ่อยๆ