ניתוח תוכן עם אפאצ'י טיקה

1. סקירה כללית

Apache Tika הוא ערכת כלים לחילוץ תוכן ומטא נתונים מסוגים שונים של מסמכים, כגון Word, Excel ו- PDF או אפילו קבצי מולטימדיה כמו JPEG ו- MP4.

ניתן לנתח את כל קבצי הטקסט והמולטימדיה באמצעות ממשק משותף, מה שהופך את טיקה לספרייה עוצמתית ורב-תכליתית לניתוח תוכן.

במאמר זה ניתן מבוא ל- Apache Tika, כולל ה- API לניתוח שלו וכיצד הוא מזהה באופן אוטומטי את סוג התוכן של המסמך. דוגמאות עבודה יובאו גם להמחשת פעולותיה של ספרייה זו.

2. תחילת העבודה

על מנת לנתח מסמכים באמצעות אפאצ'י טיקה, אנו זקוקים לתלות אחת בלבד של Maven:

 org.apache.tika טיקה-מנתחים 1.17 

הגרסה האחרונה של חפץ זה נמצאת כאן.

3. ה מנתח ממשק API

ה מנתח API הוא הלב של אפאצ'י טיקה, ומפשט את המורכבות של פעולות הניתוח. ממשק API זה מסתמך על שיטה אחת:

ניתוח חלל (זרם InputStream, מטפל ב- ContentHandler, מטא-נתונים מטא-נתונים, הקשר ParseContext) זורק IOException, SAXException, TikaException

המשמעות של פרמטרים של שיטה זו היא:

  • זרם an InputStream מופע שנוצר מהמסמך לניתוח
  • מטפל א ContentHandler אובייקט המקבל רצף של אירועי XHTML SAX המנותחים ממסמך הקלט; לאחר מכן המטפל הזה יעבד אירועים וייצא את התוצאה בצורה מסוימת
  • מטא נתונים א מטא נתונים אובייקט המעביר מאפייני מטא-נתונים פנימה והחוצה מהניתוח
  • הֶקשֵׁר א ParseContext מופע הנושא מידע ספציפי להקשר, המשמש להתאמה אישית של תהליך הניתוח

ה לְנַתֵחַ שיטה זורקת IOException אם הוא לא מצליח לקרוא מזרם הקלט, א TikaException אם לא ניתן לנתח את המסמך שנלקח מהזרם SAXException אם המטפל אינו יכול לעבד אירוע.

בעת הניתוח של מסמך, Tika מנסה לעשות שימוש חוזר ככל האפשר בספריות המנתח הקיימות דוגמת Apache POI או PDFBox. כתוצאה מכך, רוב ה מנתח שיעורי יישום הם רק מתאמים לספריות חיצוניות כאלה.

בסעיף 5 נראה כיצד ה מטפל ו מטא נתונים ניתן להשתמש בפרמטרים כדי לחלץ תוכן ומטא נתונים של מסמך.

מטעמי נוחות, אנו יכולים להשתמש בכיתת החזית טיקה כדי לגשת לפונקציונליות של מנתח ממשק API.

4. זיהוי אוטומטי

Apache Tika יכול לזהות באופן אוטומטי את סוג המסמך ואת שפתו על סמך המסמך עצמו ולא על מידע נוסף.

4.1. זיהוי סוג מסמך

איתור סוגי מסמכים יכול להיעשות באמצעות מחלקת הטמעה של גַלַאִי מִמְשָׁק, שיש לה שיטה אחת:

זיהוי MediaType (קלט java.io.InputStream, מטא נתונים מטא) זורק IOException

בשיטה זו לוקח מסמך, והמטא נתונים המשויכים אליו - ואז מחזירים a סוג המדיה אובייקט המתאר את הניחוש הטוב ביותר לגבי סוג המסמך.

מטא נתונים אינם המקור היחיד למידע שעליו מסתמך גלאי. הגלאי יכול גם להשתמש בתאי קסם, שהם דפוס מיוחד בסמוך לתחילת הקובץ או להאציל את תהליך הגילוי לגלאי מתאים יותר.

למעשה, האלגוריתם המשמש את הגלאי תלוי ביישום.

למשל, גלאי ברירת המחדל פועל תחילה עם בתים קסומים ואז מאפייני מטא נתונים. אם סוג התוכן לא נמצא בשלב זה, הוא ישתמש במטעין השירות כדי לגלות את כל הגלאים הזמינים ולנסות אותם בתורו.

4.2. זיהוי שפה

בנוסף לסוג המסמך, טיקה יכולה לזהות את שפתו גם ללא עזרה במידע מטא-נתונים.

במהדורות קודמות של טיקה, שפת המסמך מזוהה באמצעות שפה מזהה למשל.

למרות זאת, שפה מזהה הוצא משימוש לטובת שירותי אינטרנט, מה שלא הובהר במסמכי ההתחלה.

שירותי זיהוי שפה ניתנים כעת באמצעות תת-סוגים של הכיתה המופשטת LanguageDetector. באמצעות שירותי רשת, תוכל גם לגשת לשירותי תרגום מקוונים מלאים, כגון Google Translate או Microsoft Translator.

לשם קיצור, לא נעבור על שירותים אלה בפירוט.

5. טיקה בפעולה

חלק זה ממחיש את תכונות Apache Tika תוך שימוש בדוגמאות עבודה.

שיטות האיור יעטפו בכיתה:

כיתה ציבורית TikaAnalysis {// שיטות המחשה}

5.1. איתור סוגי מסמכים

הנה הקוד שנוכל להשתמש בו כדי לזהות את סוג המסמך שנקרא מתוך InputStream:

מחרוזת סטטית ציבורית detectDocTypeUsingDetector (זרם InputStream) זורק IOException {גלאי גלאי = חדש DefaultDetector (); מטא נתונים מטא נתונים = מטא נתונים חדשים (); MediaType mediaType = detector.detect (זרם, מטא נתונים); להחזיר mediaType.toString (); }

נניח שיש לנו קובץ PDF בשם tika.txt במסלול הכיתה. הסיומת של קובץ זה שונתה כדי לנסות להערים על כלי הניתוח שלנו. ניתן למצוא את סוג המסמך האמיתי ולאשר אותו באמצעות בדיקה:

@Test ציבורי בטל כאשרUsingDetector_thenDocumentTypeIsReturned () זורק IOException {זרם InputStream = this.getClass (). GetClassLoader () .getResourceAsStream ("tika.txt"); מחרוזת mediaType = TikaAnalysis.detectDocTypeUsingDetector (זרם); assertEquals ("application / pdf", mediaType); stream.close (); }

ברור כי סיומת קובץ שגויה לא יכולה למנוע מ- Tika למצוא את סוג המדיה הנכון, הודות לבתים הקסומים % PDF בתחילת הקובץ.

מטעמי נוחות, אנו יכולים לכתוב מחדש את קוד הזיהוי באמצעות ה- טיקה שיעור חזית עם אותה תוצאה:

מחרוזת סטטית ציבורית detectDocTypeUsingFacade (זרם InputStream) זורק IOException {Tika tika = Tika new (); מחרוזת mediaType = tika.detect (זרם); להחזיר mediaType; }

5.2. חילוץ תוכן

בואו נחלץ כעת את תוכן הקובץ ונחזיר את התוצאה כ- חוּט - משתמש ב מנתח ממשק API:

תמצית מחרוזת סטטית ציבוריתContentUsingParser (זרם InputStream) זורק IOException, TikaException, SAXException {מנתח מנתח = AutoDetectParser חדש (); מטפל ב- ContentHandler = BodyContentHandler חדש (); מטא נתונים מטא נתונים = מטא נתונים חדשים (); הקשר ParseContext = ParseContext חדש (); parser.parse (זרם, מטפל, מטא נתונים, הקשר); החזר handler.toString (); }

ניתן קובץ Microsoft Word בכיתה עם תוכן זה:

Apache Tika - ערכת כלים לניתוח תוכן ערכת הכלים Apache Tika ™ מגלה ומוציאה מטא נתונים וטקסט ...

ניתן לחלץ ולאמת את התוכן:

@ מבחן פומבי בטל כאשר UsParser_thenContentIsReturned () זורק IOException, TikaException, SAXException {זרם InputStream = this.getClass (). GetClassLoader () .getResourceAsStream ("tika.docx"); תוכן מחרוזת = TikaAnalysis.extractContentUsingParser (זרם); assertThat (content, containString ("אפצ'י טיקה - ערכת כלים לניתוח תוכן")); assertThat (תוכן, מכיל מחרוזת ("מזהה ומוציא מטא נתונים וטקסט")); stream.close (); }

שוב, ה טיקה ניתן להשתמש בכיתה כדי לכתוב את הקוד בצורה נוחה יותר:

תמצית מחרוזת סטטית ציבורית ContentUsingFacade (זרם InputStream) זורק IOException, TikaException {Tika tika = Tika new (); תוכן מחרוזת = tika.parseToString (זרם); להחזיר תוכן; }

5.3. חילוץ מטא נתונים

בנוסף לתוכן המסמך, ה- מנתח ממשק API יכול גם לחלץ מטא נתונים:

תמצית מטא-נתונים סטטית ציבורית MetadatatUsingParser (זרם InputStream) זורק IOException, SAXException, TikaException {מנתח מנתח = AutoDetectParser חדש (); מטפל ב- ContentHandler = BodyContentHandler חדש (); מטא נתונים מטא נתונים = מטא נתונים חדשים (); הקשר ParseContext = ParseContext חדש (); parser.parse (זרם, מטפל, מטא נתונים, הקשר); להחזיר מטא נתונים; }

כאשר קיים קובץ Microsoft Excel בשביל הכיתה, מקרה בדיקה זה מאשר כי המטא נתונים שחולצו נכונים:

@ מבחן ציבורי בטל כאשר משתמשParser_thenMetadataIsReturned () זורק IOException, TikaException, SAXException {זרם InputStream = this.getClass (). GetClassLoader () .getResourceAsStream ("tika.xlsx"); מטא-נתונים מטא-נתונים = TikaAnalysis.extractMetadatatUsingParser (זרם); assertEquals ("org.apache.tika.parser.DefaultParser", metadata.get ("X-Parsed-By")); assertEquals ("משתמש ב- Microsoft Office", metadata.get ("מחבר")); stream.close (); }

לבסוף, הנה גרסה נוספת לשיטת החילוץ באמצעות טיקה כיתת חזית:

תמצית מטא-נתונים סטטית ציבורית MetadatatUsingFacade (זרם InputStream) זורק IOException, TikaException {Tika tika = Tika new (); מטא נתונים מטא נתונים = מטא נתונים חדשים (); tika.parse (זרם, מטא נתונים); להחזיר מטא נתונים; }

6. מסקנה

מדריך זה התמקד בניתוח תוכן עם Apache Tika. משתמש ב מנתח ו גַלַאִי ממשקי API, אנו יכולים לזהות באופן אוטומטי את סוג המסמך, כמו גם לחלץ את תוכנו ומטא הנתונים שלו.

למקרי שימוש מתקדם, אנו יכולים ליצור התאמה אישית מנתח ו גַלַאִי שיעורים כדי לקבל שליטה רבה יותר על תהליך הניתוח.

קוד המקור המלא של מדריך זה ניתן למצוא באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found