TİKA - İçerik Çıkarma

Tika, verilen ayrıştırıcılardan içerik çıkarmak için çeşitli ayrıştırıcı kitaplıkları kullanır. Verilen belge türünü çıkarmak için doğru ayrıştırıcıyı seçer.

Belgeleri ayrıştırmak için genellikle Tika cephe sınıfının parseToString () yöntemi kullanılır. Aşağıda, ayrıştırma sürecine dahil olan adımlar gösterilmektedir ve bunlar Tika ParsertoString () yöntemi ile soyutlanmıştır.

Ayrıştırma sürecinin soyutlanması -

  • Başlangıçta bir belgeyi Tika'ya ilettiğimizde, onunla birlikte bulunan uygun bir tür algılama mekanizması kullanır ve belge türünü algılar.

  • Belge türü bilindiğinde, ayrıştırıcı deposundan uygun bir ayrıştırıcı seçer. Ayrıştırıcı deposu, harici kitaplıklardan yararlanan sınıfları içerir.

  • Ardından belge, içeriği ayrıştıracak, metni çıkaracak ve ayrıca okunamayan biçimler için istisnalar atacak ayrıştırıcıyı seçmek için iletilir.

Tika kullanarak İçerik Çıkarma

Aşağıda, Tika cephe sınıfını kullanarak bir dosyadan metin çıkarma programı verilmiştir -

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);
   }		 
}

Yukarıdaki kodu TikaExtraction.java olarak kaydedin ve komut isteminden çalıştırın -

javac TikaExtraction.java 
java TikaExtraction

Aşağıda, sample.txt'nin içeriği verilmiştir.

Hi students welcome to tutorialspoint

Size şu çıktıyı verir -

Extracted Content: Hi students welcome to tutorialspoint

Ayrıştırıcı Arayüzü kullanarak İçerik Çıkarma

Tika'nın ayrıştırıcı paketi, bir metin belgesini ayrıştırabileceğimiz çeşitli arayüzler ve sınıflar sağlar. Aşağıda verilen blok diyagramıdır.org.apache.tika.parser paketi.

İlgili belgeleri tek tek ayrıştırmak için, örneğin pdf ayrıştırıcı, Mp3Passer, OfficeParser, vb. Gibi birkaç ayrıştırıcı sınıfı mevcuttur. Tüm bu sınıflar ayrıştırıcı arabirimini uygular.

CompositeParser

Verilen diyagram, Tika'nın genel amaçlı ayrıştırıcı sınıflarını gösterir: CompositeParser ve AutoDetectParser. CompositeParser sınıfı bileşik tasarım desenini takip ettiğinden, bir grup ayrıştırıcı örneğini tek bir ayrıştırıcı olarak kullanabilirsiniz. CompositeParser sınıfı ayrıca ayrıştırıcı arabirimini uygulayan tüm sınıflara erişim sağlar.

AutoDetectParser

Bu, CompositeParser'ın bir alt sınıfıdır ve otomatik tip algılama sağlar. Bu işlevi kullanarak, AutoDetectParser, gelen belgeleri bileşik metodolojiyi kullanarak uygun ayrıştırıcı sınıflarına otomatik olarak gönderir.

parse () yöntemi

ParseToString () ile birlikte, ayrıştırıcı Arayüzünün parse () yöntemini de kullanabilirsiniz. Bu yöntemin prototipi aşağıda gösterilmiştir.

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

Aşağıdaki tablo, parametre olarak kabul ettiği dört nesneyi listeler.

Sr.No. Nesne ve Açıklama
1

InputStream stream

Dosyanın içeriğini içeren herhangi bir Inputstream nesnesi

2

ContentHandler handler

Tika, belgeyi XHTML içeriği olarak bu işleyiciye iletir, ardından belge SAX API kullanılarak işlenir. Bir belgedeki içeriklerin verimli bir şekilde sonradan işlenmesini sağlar.

3

Metadata metadata

Meta veri nesnesi, hem belge meta verilerinin kaynağı hem de hedefi olarak kullanılır.

4

ParseContext context

Bu nesne, istemci uygulamasının ayrıştırma sürecini özelleştirmek istediği durumlarda kullanılır.

Misal

Aşağıda, parse () yönteminin nasıl kullanıldığını gösteren bir örnek verilmiştir.

Step 1 -

Ayrıştırıcı arabiriminin parse () yöntemini kullanmak için, bu arabirim için uygulama sağlayan sınıflardan herhangi birini somutlaştırın.

PDFParser, OfficeParser, XMLParser vb. Gibi ayrı ayrı ayrıştırıcı sınıfları vardır. Bu ayrı belge ayrıştırıcılardan herhangi birini kullanabilirsiniz. Alternatif olarak, dahili olarak tüm ayrıştırıcı sınıflarını kullanan ve uygun bir ayrıştırıcı kullanarak bir belgenin içeriğini çıkaran CompositeParser veya AutoDetectParser'ı kullanabilirsiniz.

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

Step 2 -

Bir işleyici sınıfı nesnesi oluşturun. Aşağıda üç içerik işleyicisi verilmiştir -

Sr.No. Sınıf ve Açıklama
1

BodyContentHandler

Bu sınıf, XHTML çıktısının gövde bölümünü seçer ve bu içeriği çıktı yazıcıya veya çıktı akışına yazar. Ardından XHTML içeriğini başka bir içerik işleyici örneğine yönlendirir.

2

LinkContentHandler

Bu sınıf, XHTML belgesinin tüm H-Ref etiketlerini algılar ve seçer ve bunları web tarayıcıları gibi araçların kullanımı için iletir.

3

TeeContentHandler

Bu sınıf, birden fazla aracı aynı anda kullanmanıza yardımcı olur.

Hedefimiz metin içeriğini bir belgeden çıkarmak olduğundan, BodyContentHandler'ı aşağıda gösterildiği gibi somutlaştırın -

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

Metadata nesnesini aşağıda gösterildiği gibi oluşturun -

Metadata metadata = new Metadata();

Step 4 -

Giriş akışı nesnelerinden herhangi birini oluşturun ve çıkarılması gereken dosyanızı ona aktarın.

FileInputstream

Dosya yolunu parametre olarak ileterek bir dosya nesnesinin örneğini oluşturun ve bu nesneyi FileInputStream sınıfı yapıcısına iletin.

Note - Dosya nesnesine iletilen yol boşluk içermemelidir.

Bu giriş akışı sınıflarıyla ilgili sorun, bazı dosya formatlarını verimli bir şekilde işlemek için gerekli olan rastgele erişim okumalarını desteklememeleridir. Bu sorunu çözmek için Tika, TikaInputStream sağlar.

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

Step 5 -

Aşağıda gösterildiği gibi bir ayrıştırma bağlam nesnesi oluşturun -

ParseContext context =new ParseContext();

Step 6 -

Aşağıdaki prototipte gösterildiği gibi ayrıştırıcı nesnesini örnekleyin, ayrıştırma yöntemini çağırın ve gerekli tüm nesneleri iletin -

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

Aşağıda, ayrıştırıcı arabirimini kullanarak içerik çıkarma programı verilmiştir -

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());
   }
}

Yukarıdaki kodu ParserExtraction.java olarak kaydedin ve komut isteminden çalıştırın -

javac  ParserExtraction.java 
java  ParserExtraction

Aşağıda verilen sample.txt içeriğidir

Hi students welcome to tutorialspoint

Yukarıdaki programı çalıştırırsanız, size şu çıktıyı verecektir -

File content : Hi students welcome to tutorialspoint