- TIKA 教程
- TIKA - 首頁
- TIKA - 概述
- TIKA - 架構
- TIKA - 環境
- TIKA - 參考 API
- TIKA - 檔案格式
- TIKA - 文件型別檢測
- TIKA - 內容提取
- TIKA - 元資料提取
- TIKA - 語言檢測
- TIKA - GUI
- TIKA 有用資源
- TIKA - 快速指南
- TIKA - 有用資源
- TIKA - 討論
TIKA - 內容提取
Tika 使用各種解析器庫從給定的解析器中提取內容。它選擇合適的解析器來提取給定的文件型別。
對於解析文件,通常使用 Tika 門面類的 parseToString() 方法。下面顯示瞭解析過程涉及的步驟,這些步驟由 Tika ParsertoString() 方法抽象出來。
抽象解析過程 -
最初,當我們將文件傳遞給 Tika 時,它會使用其可用的合適的型別檢測機制並檢測文件型別。
一旦知道文件型別,它就會從其解析器儲存庫中選擇合適的解析器。解析器儲存庫包含利用外部庫的類。
然後將文件傳遞給選擇的解析器,該解析器將解析內容,提取文字,並對不可讀格式丟擲異常。
使用 Tika 進行內容提取
下面是使用 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);
}
}
將上述程式碼儲存為 TikaExtraction.java 並從命令提示符執行 -
javac TikaExtraction.java java TikaExtraction
下面是 sample.txt 的內容。
Hi students welcome to tutorialspoint
它給你以下輸出 -
Extracted Content: Hi students welcome to tutorialspoint
使用 Parser 介面進行內容提取
Tika 的 parser 包提供了幾個介面和類,使用這些介面和類我們可以解析文字文件。下面是 **org.apache.tika.parser** 包的框圖。
有幾個可用的解析器類,例如 pdf 解析器、Mp3Passer、OfficeParser 等,分別解析各個文件。所有這些類都實現瞭解析器介面。
CompositeParser
給定的圖表顯示了 Tika 的通用解析器類:**CompositeParser** 和 **AutoDetectParser**。由於 CompositeParser 類遵循組合設計模式,因此您可以將一組解析器例項用作單個解析器。CompositeParser 類還允許訪問所有實現解析器介面的類。
AutoDetectParser
這是 CompositeParser 的子類,它提供自動型別檢測。使用此功能,AutoDetectParser 使用組合方法自動將傳入的文件傳送到相應的解析器類。
parse() 方法
除了 parseToString() 之外,您還可以使用 parser 介面的 parse() 方法。此方法的原型如下所示。
parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context)
下表列出了它作為引數接受的四個物件。
| 序號 | 物件和描述 |
|---|---|
| 1 |
InputStream stream 包含檔案內容的任何 Inputstream 物件 |
| 2 |
ContentHandler handler Tika 將文件作為 XHTML 內容傳遞給此處理程式,然後使用 SAX API 處理文件。它提供了對文件中內容的高效後處理。 |
| 3 |
Metadata metadata 元資料物件既用作文件元資料的源又用作目標。 |
| 4 |
ParseContext context 此物件用於客戶端應用程式希望自定義解析過程的情況。 |
示例
下面是一個示例,演示瞭如何使用 parse() 方法。
**步驟 1** -
要使用 parser 介面的 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** -
建立處理程式類物件。下面列出了三個內容處理程式 -
| 序號 | 類和描述 |
|---|---|
| 1 |
BodyContentHandler 此類選取 XHTML 輸出的主體部分並將該內容寫入輸出寫入器或輸出流。然後它將 XHTML 內容重定向到另一個內容處理程式例項。 |
| 2 |
LinkContentHandler 此類檢測並選取 XHTML 文件的所有 H-Ref 標記,並轉發這些標記以供網路爬蟲等工具使用。 |
| 3 |
TeeContentHandler 此類有助於同時使用多個工具。 |
由於我們的目標是從文件中提取文字內容,因此請例項化 BodyContentHandler,如下所示 -
BodyContentHandler handler = new BodyContentHandler( );
**步驟 3** -
建立 Metadata 物件,如下所示 -
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 tutorialspoint
如果執行上述程式,它將為您提供以下輸出 -
File content : Hi students welcome to tutorialspoint