- 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