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