วิธีสกัดข้อความจากไฟล์ PPT, PPTX, และ ODP ด้วย Open XML SDK ใน .NET
ภาพรวม
บทความนี้อธิบายวิธีการสกัดข้อความจากไฟล์งานนำเสนอโดยใช้ Open XML SDK บน .NET มุ่งเน้นที่การเข้าถึง XML โดยตรงสำหรับไฟล์ PPTX ซึ่งข้อความสามารถดึงจากองค์ประกอบสไลด์ที่มีโครงสร้างได้โดยไม่ต้องเรนเดอร์สไลด์หรือใช้ Microsoft PowerPoint บทความยังอธิบายประโยชน์ด้านประสิทธิภาพเช่นการประมวลผลที่เร็วขึ้นและการใช้หน่วยความจำน้อยลง
สำหรับไฟล์ PPT และ ODP บทความอธิบายว่าข้อความไม่สามารถสกัดออกได้โดยตรงด้วย Open XML SDK แทนที่นั้น รูปแบบเหล่านี้จำเป็นต้องแปลงเป็น PPTX ก่อน แล้วจึงสกัดข้อความจากไฟล์ที่ได้
Open XML SDK
Open XML SDK ให้วิธีการที่มีโครงสร้างสูงและมีประสิทธิภาพในการสกัดข้อความจากไฟล์งานนำเสนอ—โดยเฉพาะ PPTX ที่สอดคล้องกับมาตรฐาน Open XML การให้การเข้าถึง XML พื้นฐานโดยตรงทำให้ SDK นี้สามารถจัดการเนื้อหาสไลด์ได้เร็วและยืดหยุ่นมากขึ้นเมื่อเทียบกับวิธีการแบบดั้งเดิม
การเข้าถึง XML โดยตรง
- วิเคราะห์ข้อความโดยตรง: Open XML SDK ช่วยให้คุณสกัดข้อความจากส่วน XML โดยไม่ต้องเรนเดอร์สไลด์
- องค์ประกอบที่มีโครงสร้าง: เนื่องจากข้อความถูกเก็บในแท็ก XML ที่กำหนดอย่างชัดเจน ทำให้การดึงและประมวลผลง่ายขึ้น
ตัวอย่าง: การสกัดข้อความโดยตรงจากเนื้อหา XML ของสไลด์
using (PresentationDocument presentation = PresentationDocument.Open("presentation.pptx", false))
{
var slidePart = presentation.PresentationPart.SlideParts.FirstOrDefault();
if (slidePart != null)
{
var textElements = slidePart.Slide.Descendants<DocumentFormat.OpenXml.Drawing.Text>();
foreach (var text in textElements)
{
Console.WriteLine(text.Text);
}
}
}
ข้อได้เปรียบด้านประสิทธิภาพ
- การสกัดที่เร็วขึ้น: ข้ามขั้นตอนการเปิด PowerPoint หรือ API ระดับสูงอื่น ๆ
- การใช้หน่วยความจำน้อยลง: เข้าถึงส่วน XML ที่เกี่ยวข้องเท่านั้น ลดการใช้ทรัพยากร
- ไม่ต้องใช้ Microsoft PowerPoint: ปล่อยคุณจากความต้องการติดตั้งเพิ่มเติม
ตัวอย่าง: การสกัดข้อความอย่างมีประสิทธิภาพโดยไม่ต้องโหลดงานนำเสนอทั้งหมด
using (PresentationDocument presentation = PresentationDocument.Open("presentation.pptx", false))
{
foreach (var slidePart in presentation.PresentationPart.SlideParts)
{
var texts = slidePart.Slide.Descendants<DocumentFormat.OpenXml.Drawing.Text>().Select(t => t.Text);
Console.WriteLine(string.Join(" ", texts));
}
}
การระบุองค์ประกอบข้อความ
รายละเอียดของการสกัดข้อความจากงานนำเสนอ
เมื่อสกัดข้อความจากงานนำเสนอ ให้พิจารณาปัจจัยต่อไปนี้:
- ข้อความอาจอยู่ในส่วนต่าง ๆ: สไลด์ทั่วไป, สไลด์มาสเตอร์, เลเอาต์, หรือบันทึกผู้พูด
- ตัวแสดงตำแหน่งเริ่มต้น: สไลด์มาสเตอร์และเลเอาต์อาจมีตัวแสดงตำแหน่ง (เช่น “Click to edit Master title style”) ที่ไม่ได้เป็นเนื้อหาจริงของงานนำเสนอ
- การกรองข้อความว่างหรือซ่อน: บางองค์ประกอบอาจว่างเปล่าหรือไม่ได้ตั้งใจให้แสดง
แท็กที่บรรจุข้อความ
ในไฟล์ PPTX ข้อความมักถูกเก็บใน:
<a:t>องค์ประกอบภายใน<a:p>(ย่อหน้า)<a:r>องค์ประกอบ (ส่วนของข้อความภายในย่อหน้า)
ตัวอย่าง: การสกัดองค์ประกอบข้อความทั้งหมดจากสไลด์
var textElements = slidePart.Slide.Descendants<DocumentFormat.OpenXml.Drawing.Text>();
foreach (var text in textElements)
{
Console.WriteLine(text.Text);
}
ODP และ PPT
ความไม่สามารถสกัดข้อความโดยตรง
- ไม่เหมือน PPTX، PPT (รูปแบบไบนารี) และ ODP (OpenDocument Presentation) ไม่ได้รับการสนับสนุน โดย Open XML SDK
- PPT เก็บเนื้อหาในรูปแบบไบนารีที่ปิด ทำให้การสกัดข้อความซับซ้อน
- ODP พึ่งพา OpenDocument XML ซึ่งมีโครงสร้างที่แตกต่างจาก PPTX
วิธีแก้: การแปลงเป็น PPTX
เพื่อสกัดข้อความจาก PPT หรือ ODP วิธีที่แนะนำคือ:
- แปลง PPT → PPTX ด้วย PowerPoint หรือเครื่องมือของบุคคลที่สาม
- แปลง ODP → PPTX ผ่าน LibreOffice หรือ PowerPoint
- สกัดข้อความ จาก PPTX ใหม่โดยใช้ Open XML SDK
ตัวอย่าง: การแปลง ODP ไปเป็น PPTX ผ่านบรรทัดคำสั่ง LibreOffice
soffice --headless --convert-to pptx presentation.odp
แพลตฟอร์มและเฟรมเวิร์กที่รองรับ
- Windows: .NET Framework 4.6.1 ขึ้นไป, .NET Core 2.1+, .NET 5/6/7.
- Linux/macOS: .NET Core 2.1+, .NET 5/6/7.
- สภาพแวดล้อมคลาวด์: Microsoft Azure Functions, AWS Lambda (.NET Core), คอนเทนเนอร์ Docker
- ความเข้ากันได้กับแอปพลิเคชัน Office: ไม่ต้องติดตั้ง Microsoft Office
- ภาษาการเขียนโปรแกรมที่รองรับ: Open XML SDK สามารถใช้กับ C#, VB.NET, F# และภาษาอื่นที่สนับสนุนโดย .NET
สรุป
การใช้ Open XML SDK สำหรับ การสกัดข้อความจาก PPTX ให้ประสิทธิภาพและความชัดเจน ในขณะที่ PPT และ ODP ต้องผ่านขั้นตอนการแปลงเริ่มต้นเพื่อการประมวลผลที่ราบรื่น การนำวิธีนี้ไปใช้รับประกัน ประสิทธิภาพสูง, ความยืดหยุ่น, และ ความเข้ากันได้กว้างขวาง กับแอปพลิเคชัน .NET สมัยใหม่