- TIKA 教程
- TIKA - 首頁
- TIKA - 概述
- TIKA - 架構
- TIKA - 環境
- TIKA - 參考 API
- TIKA - 檔案格式
- TIKA - 文件型別檢測
- TIKA - 內容提取
- TIKA - 元資料提取
- TIKA - 語言檢測
- TIKA - 圖形使用者介面 (GUI)
- TIKA 有用資源
- TIKA - 快速指南
- TIKA - 有用資源
- TIKA - 討論
TIKA - 元資料提取
除了內容,Tika 還可以提取檔案中的元資料。元資料只不過是與檔案一起提供的附加資訊。如果我們考慮一個音訊檔案,則藝術家姓名、專輯名稱、標題都屬於元資料。
XMP 標準
可擴充套件元資料平臺 (XMP) 是一種用於處理和儲存與檔案內容相關資訊的標準。它由Adobe Systems Inc建立。XMP 提供了定義、建立和處理元資料的標準。您可以將此標準嵌入到多種檔案格式中,例如PDF、JPEG、JPEG 2000、GIF、PNG、HTML等。
屬性類
Tika 使用 Property 類來遵循 XMP 屬性定義。它提供PropertyType 和ValueType 列舉來捕獲元資料的名稱和值。
元資料類
此類實現各種介面,例如ClimateForcast、CativeCommons、Geographic、TIFF 等,以提供對各種元資料模型的支援。此外,此類還提供各種方法來從檔案中提取內容。
元資料名稱
我們可以使用names()方法從其元資料物件中提取檔案的全部元資料名稱列表。它返回所有名稱作為字串陣列。使用元資料的名稱,我們可以使用get()方法獲取值。它接受一個元資料名稱並返回與其關聯的值。
String[] metadaNames = metadata.names(); String value = metadata.get(name);
使用 Parse 方法提取元資料
每當我們使用 parse() 解析檔案時,我們都會將一個空的元資料物件作為引數之一傳遞。此方法提取給定檔案的元資料(如果該檔案包含任何元資料),並將它們放入元資料物件中。因此,在使用 parse() 解析檔案後,我們可以從該物件中提取元資料。
Parser parser = new AutoDetectParser(); BodyContentHandler handler = new BodyContentHandler(); Metadata metadata = new Metadata(); //empty metadata object FileInputStream inputstream = new FileInputStream(file); ParseContext context = new ParseContext(); parser.parse(inputstream, handler, metadata, context); // now this metadata object contains the extracted metadata of the given file. metadata.metadata.names();
以下是從文字檔案中提取元資料的完整程式。
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 GetMetadata {
public static void main(final String[] args) throws IOException, TikaException {
//Assume that boy.jpg is in your current directory
File file = new File("boy.jpg");
//Parser method parameters
Parser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();
FileInputStream inputstream = new FileInputStream(file);
ParseContext context = new ParseContext();
parser.parse(inputstream, handler, metadata, context);
System.out.println(handler.toString());
//getting the list of all meta data elements
String[] metadataNames = metadata.names();
for(String name : metadataNames) {
System.out.println(name + ": " + metadata.get(name));
}
}
}
將上述程式碼儲存為 GetMetadata.java 並使用以下命令從命令提示符執行它:
javac GetMetadata .java java GetMetadata
以下是 boy.jpg 的快照
如果執行上述程式,則會得到以下輸出:
X-Parsed-By: org.apache.tika.parser.DefaultParser Resolution Units: inch Compression Type: Baseline Data Precision: 8 bits Number of Components: 3 tiff:ImageLength: 3000 Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert Component 1: Y component: Quantization table 0, Sampling factors 2 horiz/2 vert Image Height: 3000 pixels X Resolution: 300 dots Original Transmission Reference: 53616c7465645f5f2368da84ca932841b336ac1a49edb1a93fae938b8db2cb3ec9cc4dc28d7383f1 Image Width: 4000 pixels IPTC-NAA record: 92 bytes binary data Component 3: Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert tiff:BitsPerSample: 8 Application Record Version: 4 tiff:ImageWidth: 4000 Content-Type: image/jpeg Y Resolution: 300 dots
我們也可以獲取我們想要的元資料值。
新增新的元資料值
我們可以使用元資料類的 add() 方法新增新的元資料值。以下是此方法的語法。在這裡,我們新增作者姓名。
metadata.add(“author”,”Tutorials point”);
元資料類具有預定義的屬性,包括從ClimateForcast、CativeCommons、Geographic等類繼承的屬性,以支援各種資料模型。下面顯示的是 Tika 為遵循 TIFF 影像格式的 XMP 元資料標準而實現的 TIFF 介面繼承的 SOFTWARE 資料型別的用法。
metadata.add(Metadata.SOFTWARE,"ms paint");
以下是演示如何將元資料值新增到給定檔案的完整程式。此處在輸出中顯示元資料元素列表,以便您可以在新增新值後觀察列表的變化。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
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 AddMetadata {
public static void main(final String[] args) throws IOException, SAXException, TikaException {
//create a file object and assume sample.txt is in your current directory
File file = new File("Example.txt");
//Parser 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 document
parser.parse(inputstream, handler, metadata, context);
//list of meta data elements before adding new elements
System.out.println( " metadata elements :" +Arrays.toString(metadata.names()));
//adding new meta data name value pair
metadata.add("Author","Tutorials Point");
System.out.println(" metadata name value pair is successfully added");
//printing all the meta data elements after adding new elements
System.out.println("Here is the list of all the metadata
elements after adding new elements");
System.out.println( Arrays.toString(metadata.names()));
}
}
將上述程式碼儲存為 AddMetadata.java 類,並從命令提示符執行它:
javac AddMetadata .java java AddMetadata
以下是 Example.txt 的內容
Hi students welcome to tutorialspoint
如果執行上述程式,則會得到以下輸出:
metadata elements of the given file : [Content-Encoding, Content-Type] enter the number of metadata name value pairs to be added 1 enter metadata1name: Author enter metadata1value: Tutorials point metadata name value pair is successfully added Here is the list of all the metadata elements after adding new elements [Content-Encoding, Author, Content-Type]
設定現有元資料元素的值
您可以使用 set() 方法設定現有元資料元素的值。使用 set() 方法設定日期屬性的語法如下:
metadata.set(Metadata.DATE, new Date());
您還可以使用 set() 方法為屬性設定多個值。使用 set() 方法為 Author 屬性設定多個值的語法如下:
metadata.set(Metadata.AUTHOR, "ram ,raheem ,robin ");
以下是演示 set() 方法的完整程式。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
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 SetMetadata {
public static void main(final String[] args) throws IOException,SAXException, TikaException {
//Create a file object and assume example.txt is in your current directory
File file = new File("example.txt");
//parameters of parse() method
Parser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();
FileInputStream inputstream = new FileInputStream(file);
ParseContext context = new ParseContext();
//Parsing the given file
parser.parse(inputstream, handler, metadata, context);
//list of meta data elements elements
System.out.println( " metadata elements and values of the given file :");
String[] metadataNamesb4 = metadata.names();
for(String name : metadataNamesb4) {
System.out.println(name + ": " + metadata.get(name));
}
//setting date meta data
metadata.set(Metadata.DATE, new Date());
//setting multiple values to author property
metadata.set(Metadata.AUTHOR, "ram ,raheem ,robin ");
//printing all the meta data elements with new elements
System.out.println("List of all the metadata elements after adding new elements ");
String[] metadataNamesafter = metadata.names();
for(String name : metadataNamesafter) {
System.out.println(name + ": " + metadata.get(name));
}
}
}
將上述程式碼儲存為 SetMetadata.java 並從命令提示符執行它:
javac SetMetadata.java java SetMetadata
以下是 example.txt 的內容。
Hi students welcome to tutorialspoint
如果執行上述程式,則會得到以下輸出。在輸出中,您可以觀察到新新增的元資料元素。
metadata elements and values of the given file : Content-Encoding: ISO-8859-1 Content-Type: text/plain; charset = ISO-8859-1 Here is the list of all the metadata elements after adding new elements date: 2014-09-24T07:01:32Z Content-Encoding: ISO-8859-1 Author: ram, raheem, robin Content-Type: text/plain; charset = ISO-8859-1