Tartalomelemzés Apache Tikával

1. Áttekintés

Az Apache Tika egy eszközkészlet tartalom és metaadatok kinyerésére különféle típusú dokumentumokból, például Word, Excel és PDF vagy akár multimédiás fájlok, például JPEG és MP4.

Az összes szöveges és multimédiás fájl elemezhető egy közös felületen, így a Tika egy erőteljes és sokoldalú könyvtár a tartalomelemzéshez.

Ebben a cikkben bemutatjuk az Apache Tika alkalmazását, beleértve az elemző API-t és azt, hogy miként észleli automatikusan a dokumentum tartalmi típusát. Működő példákkal is szolgálunk a könyvtár működésének szemléltetésére.

2. Az első lépések

A dokumentumok elemzéséhez az Apache Tika használatával csak egy Maven-függőségre van szükségünk:

 org.apache.tika tika-parsers 1.17 

A műtárgy legújabb verziója itt található.

3. Az Elemző API

A Elemző Az API az Apache Tika szíve, elvonva az elemzési műveletek összetettségét. Ez az API egyetlen módszeren alapszik:

void parse (InputStream adatfolyam, ContentHandler kezelő, Metadata metaadatok, ParseContext kontextus) dobja az IOException, SAXException, TikaException

A módszer paramétereinek jelentése:

  • folyam an InputStream az elemzendő dokumentumból létrehozott példány
  • kezelő a ContentHandler objektum, amely a bemeneti dokumentumból elemzett XHTML SAX eseménysorozatot fogad; ez a kezelő ezután feldolgozza az eseményeket és az eredményt egy adott formában exportálja
  • metaadatok a Metaadatok metaadat tulajdonságokat továbbító objektum az elemzőben és azon kívül
  • kontextus a ParseContext példány, amely kontextus-specifikus információkat tartalmaz, az elemzési folyamat testreszabására szolgál

A elemzés módszer dob egy IOException ha nem sikerül beolvasni a bemeneti adatfolyamból, a TikaException ha az adatfolyamból vett dokumentum nem elemezhető és a SAXException ha a kezelő nem képes feldolgozni egy eseményt.

A dokumentum elemzése során a Tika a lehető legnagyobb mértékben megpróbálja újból felhasználni a meglévő elemző könyvtárakat, például az Apache POI-t vagy a PDFBoxot. Ennek eredményeként a legtöbb Elemző implementációs osztályok csak illesztők az ilyen külső könyvtárakhoz.

Az 5. szakaszban meglátjuk, hogyan kezelő és metaadatok paraméterek használhatók a dokumentum tartalmának és metaadatainak kinyerésére.

A kényelem érdekében használhatjuk a homlokzati osztályt Tika hogy elérje a Elemző API.

4. Automatikus észlelés

Az Apache Tika automatikusan felismeri a dokumentum típusát és nyelvét a dokumentum alapján, nem pedig kiegészítő információk alapján.

4.1. Dokumentumtípus észlelése

A dokumentumtípusok felismerése a. Implementációs osztályának felhasználásával történhet Detektor felület, amelynek egyetlen módszere van:

A MediaType Detection (java.io.InputStream input, Metadata metadata) dobja az IOException-t

Ez a módszer elvesz egy dokumentumot és a hozzá tartozó metaadatokat, majd visszaadja a Média típus objektum, amely leírja a legjobb tippet a dokumentum típusával kapcsolatban.

A metaadatok nem az egyetlen információforrás, amelyre a detektor támaszkodik. Az érzékelő varázsbájtokat is felhasználhat, amelyek egy speciális minta a fájl kezdete közelében, vagy átruházhatja az észlelési folyamatot egy alkalmasabb detektorra.

Valójában a detektor által használt algoritmus megvalósítástól függ.

Például az alapértelmezett detektor először mágikus bájtokkal, majd metaadat tulajdonságokkal dolgozik. Ha a tartalomtípus még nem található meg ezen a ponton, akkor a szolgáltatás betöltőjével felfedezi az összes rendelkezésre álló detektort, és sorra kipróbálja őket.

4.2. Nyelvészlelés

A dokumentum típusa mellett a Tika a metaadat-információk segítsége nélkül is képes azonosítani nyelvét.

A Tika korábbi kiadásaiban a dokumentum nyelvét az a segítségével észlelték LanguageIdentifier példa.

Azonban, LanguageIdentifier elavult a webszolgáltatások javára, ami az Első lépések dokumentumokban nem egyértelmű.

A nyelvfelismerési szolgáltatásokat most az absztrakt osztály altípusain keresztül nyújtják LanguageDetector. A webes szolgáltatások használatával teljes értékű online fordítási szolgáltatásokat is elérhet, például a Google Translate vagy a Microsoft Translator szolgáltatásokat.

A rövidség kedvéért nem vesszük át részletesen ezeket a szolgáltatásokat.

5. Tika akcióban

Ez a szakasz az Apache Tika funkcióit szemlélteti működő példákkal.

Az ábrázolási módszereket egy osztályba csomagolják:

nyilvános osztály TikaAnalysis {// illusztráció módszerek}

5.1. Dokumentumtípusok felismerése

Itt található a kód, amellyel felismerhetjük az egyikből olvasott dokumentum típusát InputStream:

public static String DetectDocTypeUsingDetector (InputStream stream) dobja az IOException-t {Detector detector = new DefaultDetector (); Metadata metadata = new Metadata (); MediaType mediaType = detector.detect (adatfolyam, metaadatok); return mediaType.toString (); }

Tegyük fel, hogy van egy megnevezett PDF fájlunk tika.txt az osztályúton. A fájl kiterjesztését megváltoztatták, hogy megpróbálja átverni elemző eszközünket. A dokumentum valódi típusa még mindig megtalálható és megerősíthető egy teszt segítségével:

@Test public void, amikor aUsingDetector_thenDocumentTypeIsReturned () dobja az IOException {InputStream stream = this.getClass (). GetClassLoader () .getResourceAsStream ("tika.txt"); String mediaType = TikaAnalysis.detectDocTypeUsingDetector (adatfolyam); assertEquals ("alkalmazás / pdf", mediaType); stream.close (); }

Nyilvánvaló, hogy a mágikus bájtoknak köszönhetően a helytelen fájlkiterjesztés nem akadályozhatja meg Tikát abban, hogy megtalálja a megfelelő médiatípust % PDF a fájl elején.

A kényelem érdekében újraírhatjuk az észlelési kódot a Tika homlokzati osztály ugyanazzal az eredménnyel:

public static String DetectDocTypeUsingFacade (InputStream stream) dobja az IOExceptiont {Tika tika = new Tika (); String mediaType = tika.detect (stream); return mediaType; }

5.2. Tartalom kibontása

Most vonjuk ki egy fájl tartalmát, és adjuk vissza az eredményt a-ként Húr - használni a Elemző API:

public static String extractContentUsingParser (InputStream stream) dobja az IOException, TikaException, SAXException {Parser parser = new AutoDetectParser (); ContentHandler kezelő = new BodyContentHandler (); Metadata metadata = new Metadata (); ParseContext context = új ParseContext (); parser.parse (adatfolyam, kezelő, metaadatok, kontextus); return handler.toString (); }

Adott egy Microsoft Word fájlt az osztályban ezen tartalommal:

Apache Tika - tartalomelemző eszközkészlet Az Apache Tika ™ eszköztár felismeri és kivonja a metaadatokat és a szöveget ...

A tartalom kinyerhető és ellenőrizhető:

@Test public void whenUsingParser_thenContentIsReturned () IOException, TikaException, SAXException {InputStream stream = this.getClass (). GetClassLoader () .getResourceAsStream ("tika.docx"); Karaktersorozat tartalma = TikaAnalysis.extractContentUsingParser (stream); assertThat (tartalom, tartalmazzaString ("Apache Tika - tartalomelemzési eszközkészlet")); assertThat (content, tartalmazString ("felismeri és kivonja a metaadatokat és a szöveget")); stream.close (); }

Ismét a Tika osztály használható a kód kényelmesebb megírásához:

public static String extractContentUsingFacade (InputStream stream) dobja az IOException, TikaException {Tika tika = new Tika (); Karaktersorozat tartalma = tika.parseToString (adatfolyam); tartalom visszaküldése; }

5.3. Metaadatok kinyerése

A dokumentum tartalmán kívül a Elemző Az API metaadatokat is kivonhat:

public static Metadata extractMetadatatUsingParser (InputStream stream) dobja az IOException, SAXException, TikaException {Parser parser = new AutoDetectParser (); ContentHandler kezelő = new BodyContentHandler (); Metadata metadata = new Metadata (); ParseContext context = új ParseContext (); parser.parse (adatfolyam, kezelő, metaadatok, kontextus); metaadatok visszaküldése; }

Amikor egy Microsoft Excel fájl létezik az osztályútvonalon, ez a teszteset megerősíti, hogy a kibontott metaadatok helyesek:

@Test public void whenUsingParser_thenMetadataIsReturned () IOException, TikaException, SAXException dobja {InputStream stream = this.getClass (). GetClassLoader () .getResourceAsStream ("tika.xlsx"); Metadata metadata = TikaAnalysis.extractMetadatatUsingParser (stream); assertEquals ("org.apache.tika.parser.DefaultParser", metadata.get ("X-Parsed-By"); assertEquals ("Microsoft Office-felhasználó", metadata.get ("Szerző")); stream.close (); }

Végül itt van az extrakciós módszer egy másik változata a Tika homlokzati osztály:

public static Metadata extractMetadatatUsingFacade (InputStream stream) dobja az IOException, TikaException {Tika tika = new Tika (); Metadata metadata = new Metadata (); tika.parse (folyam, metaadatok); metaadatok visszaküldése; }

6. Következtetés

Ez az oktatóanyag az Apache Tika tartalomelemzésére összpontosított. Használni a Elemző és Detektor API-k segítségével automatikusan felismerhetjük a dokumentum típusát, valamint kinyerhetjük annak tartalmát és metaadatait.

Haladó felhasználási esetekhez egyénieket hozhatunk létre Elemző és Detektor osztályokat, hogy jobban ellenőrizhessék az elemzési folyamatot.

Az oktatóanyag teljes forráskódja megtalálható a GitHub oldalon.


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