开发手册 欢迎您!
软件开发者资料库

TIKA - 元数据提取

TIKA元数据提取 - 从简单和简单的步骤学习TIKA,从基本到高级概念,包括概述,架构,环境,参考API,文件格式,文档类型检测,内容提取,元数据提取,语言检测,GUI,提取PDF,提取ODF,提取MS-Office文件,提取文本文档,提取HTML文档,提取XML文档,提取.class文件,提取JAR文件,提取图像文件,提取mp4文件,提取mp3文件。

除了内容,Tika还从文件中提取元数据.元数据只不过是随文件提供的附加信息.如果我们考虑音频文件,则艺术家名称,专辑名称,标题属于元数据.

XMP标准

可扩展元数据平台(XMP)是用于处理和存储与文件内容相关的信息的标准.它由 Adobe Systems Inc 创建. XMP提供了用于定义,创建和处理元数据的标准.您可以将此标准嵌入到多种文件格式中,例如 PDF , JPEG , JPEG , GIF , jpg , HTML 等.

属性类

Tika使用Property类来跟踪XMP属性定义.它提供 PropertyType 和 ValueType 枚举以捕获元数据的名称和值.

元数据类

此类实现各种接口,例如 ClimateForcast , CativeCommons,地理,TIFF等,为各种元数据模型提供支持.此外,此类提供了从文件中提取内容的各种方法.

元数据名称

我们可以提取所有元数据名称的列表使用 names()方法从其元数据对象中获取文件.它将所有名称作为字符串数组返回.使用元数据的名称,我们可以使用 get()方法获取值.它采用元数据名称并返回与之关联的值.

String[] metadaNames = metadata.names();String value = metadata.get(name);

使用解析方法提取元数据

每当我们使用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 .javajava  GetMetadata

以下是boy.jpg的快照

jpg

如果你执行上面的程序,它会给你以下输出 :

X-Parsed-By: org.apache.tika.parser.DefaultParserResolution Units: inchCompression Type: BaselineData Precision: 8 bitsNumber of Components: 3tiff:ImageLength: 3000Component 2: Cb component: Quantization table 1, Sampling factors 1 horiz/1 vertComponent 1: Y component: Quantization table 0, Sampling factors 2 horiz/2 vertImage Height: 3000 pixelsX Resolution: 300 dotsOriginal Transmission Reference:   53616c7465645f5f2368da84ca932841b336ac1a49edb1a93fae938b8db2cb3ec9cc4dc28d7383f1Image Width: 4000 pixelsIPTC-NAA record: 92 bytes binary dataComponent 3: Cr component: Quantization table 1, Sampling factors 1 horiz/1 verttiff:BitsPerSample: 8Application Record Version: 4tiff:ImageWidth: 4000Content-Type: image/jpegY Resolution: 300 dots

我们还可以获得所需的元数据值.

添加新的元数据值

我们可以添加新的元数据值使用元数据类的add()方法.下面给出了此方法的语法.这里我们添加作者姓名.

metadata.add("author","Tutorials point");

元数据类具有预定义的属性,包括从 ClimateForcast ,CativeCommons,地理等,以支持各种数据模型.下面显示的是使用从Tika实现的TIFF接口继承的SOFTWARE数据类型,以遵循TIFF图像格式的XMP元数据标准.

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

以下是内容of Example.txt

Hi students welcome to IT屋

如果你执行上面的程序,它会给你以下输出 :

metadata elements of the given file :[Content-Encoding, Content-Type] enter the number of metadata name value pairs to be added 1enter metadata1name: Author enter metadata1value: Tutorials point metadata name value pair is successfully addedHere is the list of all the metadata elements  after adding new elements[Content-Encoding, Author, Content-Type]

将值设置为现有元数据元素

您可以使用set()方法将值设置为现有元数据元素.使用set()方法设置date属性的语法如下 :

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 IT屋

如果执行上述程序,它将为您提供以下输出.在输出中,您可以观察新添加的元数据元素.

metadata elements and values of the given file :Content-Encoding: ISO-8859-1Content-Type: text/plain; charset = ISO-8859-1Here is the list of all the metadata elements  after adding new elements date: 2014-09-24T07:01:32ZContent-Encoding: ISO-8859-1Author: ram, raheem, robin Content-Type: text/plain; charset = ISO-8859-1