TIKA - Ekstrakcja treści

Tika używa różnych bibliotek parserów do wyodrębniania treści z podanych parserów. Wybiera odpowiedni parser do wyodrębnienia danego typu dokumentu.

Do analizowania dokumentów na ogół używana jest metoda parseToString () klasy elewacji Tika. Poniżej przedstawiono kroki związane z procesem analizowania i są one wyodrębnione za pomocą metody Tika ParsertoString ().

Abstrakcja procesu analizy -

  • Początkowo, kiedy przekazujemy dokument do Tiki, używa ona odpowiedniego mechanizmu wykrywania typu, który jest z nią dostępny i wykrywa typ dokumentu.

  • Gdy znany jest typ dokumentu, wybiera on odpowiedni parser ze swojego repozytorium parserów. Repozytorium parsera zawiera klasy, które korzystają z bibliotek zewnętrznych.

  • Następnie dokument jest przekazywany w celu wybrania parsera, który przeanalizuje zawartość, wyodrębni tekst, a także wyrzuci wyjątki dla nieczytelnych formatów.

Ekstrakcja treści za pomocą Tika

Poniżej podano program do wyodrębniania tekstu z pliku za pomocą klasy elewacji Tika -

import java.io.File;
import java.io.IOException;

import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;

import org.xml.sax.SAXException;

public class TikaExtraction {
	
   public static void main(final String[] args) throws IOException, TikaException {

      //Assume sample.txt is in your current directory		        
      File file = new File("sample.txt");
      
      //Instantiating Tika facade class
      Tika tika = new Tika();
      String filecontent = tika.parseToString(file);
      System.out.println("Extracted Content: " + filecontent);
   }		 
}

Zapisz powyższy kod jako TikaExtraction.java i uruchom go z wiersza poleceń -

javac TikaExtraction.java 
java TikaExtraction

Poniżej podano zawartość sample.txt.

Hi students welcome to tutorialspoint

Daje następujące dane wyjściowe -

Extracted Content: Hi students welcome to tutorialspoint

Ekstrakcja zawartości przy użyciu interfejsu parsera

Pakiet parsera Tiki zapewnia kilka interfejsów i klas, za pomocą których możemy analizować dokument tekstowy. Poniżej przedstawiono schemat blokowyorg.apache.tika.parser pakiet.

Dostępnych jest kilka klas parsera, np. Parser pdf, Mp3Passer, OfficeParser itp., Które umożliwiają indywidualną analizę poszczególnych dokumentów. Wszystkie te klasy implementują interfejs parsera.

CompositeParser

Podany diagram przedstawia klasy parsera ogólnego przeznaczenia Tiki: CompositeParser i AutoDetectParser. Ponieważ klasa CompositeParser jest zgodna ze złożonym wzorcem projektowym, można użyć grupy wystąpień analizatora składni jako pojedynczego analizatora składni. Klasa CompositeParser umożliwia również dostęp do wszystkich klas implementujących interfejs analizatora składni.

AutoDetectParser

Jest to podklasa CompositeParser i zapewnia automatyczne wykrywanie typu. Korzystając z tej funkcji, AutoDetectParser automatycznie wysyła dokumenty przychodzące do odpowiednich klas analizatora składni przy użyciu metodologii złożonej.

parse (), metoda

Wraz z parseToString () można także użyć metody parse () interfejsu parsera. Poniżej przedstawiono prototyp tej metody.

parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context)

Poniższa tabela zawiera listę czterech obiektów, które akceptuje jako parametry.

Sr.No. Obiekt i opis
1

InputStream stream

Dowolny obiekt Inputstream zawierający zawartość pliku

2

ContentHandler handler

Tika przekazuje dokument jako zawartość XHTML do tego modułu obsługi, po czym dokument jest przetwarzany za pomocą SAX API. Zapewnia wydajne przetwarzanie treści w dokumencie.

3

Metadata metadata

Obiekt metadanych jest używany zarówno jako źródło, jak i cel metadanych dokumentu.

4

ParseContext context

Ten obiekt jest używany w przypadkach, gdy aplikacja kliencka chce dostosować proces analizowania.

Przykład

Poniżej podano przykład pokazujący, jak używana jest metoda parse ().

Step 1 -

Aby użyć metody parse () interfejsu parsera, utwórz wystąpienie dowolnej klasy zapewniającej implementację tego interfejsu.

Istnieją indywidualne klasy parsera, takie jak PDFParser, OfficeParser, XMLParser itp. Możesz użyć dowolnego z tych indywidualnych parserów dokumentów. Alternatywnie można użyć CompositeParser lub AutoDetectParser, który używa wszystkich klas analizatora składni wewnętrznie i wyodrębnia zawartość dokumentu przy użyciu odpowiedniego analizatora składni.

Parser parser = new AutoDetectParser();
   (or)
Parser parser = new CompositeParser();  
   (or)        
object of any individual parsers given in Tika Library

Step 2 -

Utwórz obiekt klasy obsługi. Poniżej podano trzy moduły obsługi treści -

Sr.No. Klasa i opis
1

BodyContentHandler

Ta klasa wybiera część treści wyniku XHTML i zapisuje tę zawartość w module zapisującym dane wyjściowe lub w strumieniu wyjściowym. Następnie przekierowuje zawartość XHTML do innej instancji procedury obsługi treści.

2

LinkContentHandler

Ta klasa wykrywa i wybiera wszystkie znaczniki H-Ref z dokumentu XHTML i przekazuje je do użycia narzędzi, takich jak roboty sieciowe.

3

TeeContentHandler

Ta klasa pomaga w korzystaniu z wielu narzędzi jednocześnie.

Ponieważ naszym celem jest wyodrębnienie treści tekstowej z dokumentu, utwórz wystąpienie BodyContentHandler, jak pokazano poniżej -

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

Utwórz obiekt Metadata, jak pokazano poniżej -

Metadata metadata = new Metadata();

Step 4 -

Utwórz dowolny z obiektów strumienia wejściowego i przekaż do niego plik, który powinien zostać wyodrębniony.

FileInputstream

Utwórz wystąpienie obiektu pliku, przekazując ścieżkę pliku jako parametr i przekaż ten obiekt do konstruktora klasy FileInputStream.

Note - Ścieżka przekazana do obiektu pliku nie powinna zawierać spacji.

Problem z tymi klasami strumienia wejściowego polega na tym, że nie obsługują one odczytów o dostępie swobodnym, co jest wymagane do wydajnego przetwarzania niektórych formatów plików. Aby rozwiązać ten problem, Tika udostępnia TikaInputStream.

File  file = new File(filepath)
FileInputStream inputstream = new FileInputStream(file);
   (or)
InputStream stream = TikaInputStream.get(new File(filename));

Step 5 -

Utwórz obiekt kontekstu analizy, jak pokazano poniżej -

ParseContext context =new ParseContext();

Step 6 -

Utwórz instancję obiektu parsera, wywołaj metodę analizy i przekaż wszystkie wymagane obiekty, jak pokazano na poniższym prototypie -

parser.parse(inputstream, handler, metadata, context);

Poniżej podano program do ekstrakcji treści za pomocą interfejsu parsera -

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class ParserExtraction {
	
   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //Assume sample.txt is in your current directory
      File file = new File("sample.txt");
      
      //parse method parameters
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream inputstream = new FileInputStream(file);
      ParseContext context = new ParseContext();
      
      //parsing the file
      parser.parse(inputstream, handler, metadata, context);
      System.out.println("File content : " + Handler.toString());
   }
}

Zapisz powyższy kod jako ParserExtraction.java i uruchom go z wiersza polecenia -

javac  ParserExtraction.java 
java  ParserExtraction

Poniżej podano zawartość sample.txt

Hi students welcome to tutorialspoint

Jeśli wykonasz powyższy program, da ci on następujący wynik -

File content : Hi students welcome to tutorialspoint