TIKA內容提取

Tika使用不同的解析器庫來提取給解析器的內容。它選擇了正確的語法分析器提取給定的文檔類型。

解析文件,一般用於Tika外觀facade類的parseToString()方法。下面顯示的是所涉及分析過程的步驟和這些由Tika的ParsertoString()方法提取。

Parsing

抽象的分析過程:

  • 最初,當我們傳一個文件到Tika,它使用與之適合的類型檢測機制和檢測文件類型。

  • 一旦文檔類型是已知的,它選擇從解析器庫中合適的解析器。解析器庫中包含的類使用外部庫。

  • 然後將文檔傳送到選擇將解析的內容,提取文本,並且還拋出了不可讀格式異常解析器。

使用Tika內容提取

下面給出的是程序使用Tika facade 類從文件中提取文本:

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

將以上代碼保存爲TikaExtraction.java並在命令提示符下運行:

javac TikaExtraction.java
java TikaExtraction

注意:假設 sample.txt 是具有下列內容。

Hi students welcome to yiibai

它提供了以下的輸出:

Extracted Content: Hi students welcome to yiibai

使用Parser接口內容提取

Tika 解析器包提供了使用它可以分析一個文本文檔的幾個接口和類。下面給出的是org.apache.tika.parser包的框架圖。

Parser

有幾個可用的解析器類,如PDF格式分析器,Mp3Passer,OfficeParser等,逐一分析各自的文件。所有這些類都實現瞭解析器接口。

CompositeParser

給出的圖表顯示Tika通用解析器類CompositeParser 主AutoDetectParser。由於CompositeParser類遵循複合設計模式,可以用一組解析器實例作爲一個單獨的解析器。CompositeParser類也可以訪問所有實現解析器接口的類。

AutoDetectParser

這是CompositeParser的子類,它提供了自動類型檢測。使用此功能,AutoDetectParser自動發送收到的文件到使用該複合方法適當分析器類。

parse()方法

除了parseToString(),還可以使用分析器接口的parse()方法。該方法的原型如下所示。

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

下表列出了它接受作爲參數的四個對象。

S.No.

對象及描述

1

InputStream stream

包含任何文件的InputStream對象的內容

2

ContentHandler handler

Tika通過文檔作爲XHTML內容到此處理,此後該文件正在使用SAX API處理。它提供了在一個文件有效的後處理的內容。

3

Metadata metadata

元數據對象是用來既作爲源和文件的元數據的目標。

4

ParseContext context

此對象使用在如遇有客戶端應用程序想要定製解析過程。

例如:

下面給出一個例子,說明如何使用 parse()方法。

步驟 1:

要使用解析器接口的parse()方法,實例化任何爲其提供實現這個接口的類。

也有個別解析器類,如PDFParser,OfficeParser,XMLParser等等。可以使用這些個人文件解析器。或者也可以使用CompositeParser或AutoDetectParser在內部使用的所有解析器類,並提取使用合適的解析器文檔的內容。

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

步驟 2:

創建一個處理類的對象。下面給出的是三個內容處理程序:

S.No.

類及描述

1

BodyContentHandler

這個類採用XHTML輸出的主體部分,並寫入該內容到輸出寫入或輸出流。然後重定向XHTML內容到另一個內容處理程序實例。

2

LinkContentHandler

這個類檢測,並挑選XHTML文檔的所有H-參考標籤和轉發那些使用類似網絡爬蟲工具。

3

TeeContentHandler

這個類可以幫助在同時使用多個工具。

由於我們的目標是要提取的文件的文本內容,實例化BodyContentHandler如下圖所示:

BodyContentHandler handler = new BodyContentHandler( );

步驟  3:

創建的元數據對象,如下所示:

Metadata metadata = new Metadata();

步驟  4:

創建任何輸入流對象,並通過您的文件應該被提取到它。

FileInputstream

通過將文件路徑作爲參數實例化一個文件對象,這個對象傳遞給的FileInputStream類的構造函數。

注意:傳遞給文件對象的路徑不應包含空格。

使用這些輸入流類的問題是,它們不支持隨機訪問讀取,來高效地處理某些文件格式是必需。要解決此問題,Tika提供TikaInputStream。

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

步驟 5:

創建一個解析的上下文對象,如下所示:

ParseContext context =new ParseContext();

步驟 6:

實例化解析器對象,調用parse方法,並通過所有需要的對象,如下面的原型:

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

下面給出的是程序使用的解析器接口內容提取:

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

將以上代碼保存爲 ParserExtraction.java 並在命令提示符下運行:

javac ParserExtraction.java
java ParserExtraction

假設 sample.txt 包含以下內容。

Hi students welcome to yiibai

它提供了以下的輸出:

File content : Hi students welcome to yiibai