Tika使用不同的解析器庫來提取給解析器的內容。它選擇了正確的語法分析器提取給定的文件型別。
解析檔案,一般用於Tika外觀facade類的parseToString()方法。下面顯示的是所涉及分析過程的步驟和這些由Tika的ParsertoString()方法提取。
抽象的分析過程:
最初,當我們傳一個檔案到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
Tika 解析器包提供了使用它可以分析一個文字文件的幾個介面和類。下面給出的是org.apache.tika.parser包的框架圖。
有幾個可用的解析器類,如PDF格式分析器,Mp3Passer,OfficeParser等,逐一分析各自的檔案。所有這些類都實現了解析器介面。
給出的圖表顯示Tika通用解析器類CompositeParser 主AutoDetectParser。由於CompositeParser類遵循複合設計模式,可以用一組解析器範例作為一個單獨的解析器。CompositeParser類也可以存取所有實現解析器介面的類。
這是CompositeParser的子類,它提供了自動型別檢測。使用此功能,AutoDetectParser自動傳送收到的檔案到使用該複合方法適當分析器類。
除了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類別建構函式。
注意:傳遞給檔案物件的路徑不應包含空格。
使用這些輸入流類的問題是,它們不支援隨機存取讀取,來高效地處理某些檔案格式是必需。要解決此問題,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