Учебники

ТИКА — Извлечение метаданных

Помимо контента, Тика также извлекает метаданные из файла. Метаданные — это не что иное, как дополнительная информация, поставляемая с файлом. Если мы рассмотрим аудиофайл, имя исполнителя, название альбома, название попадают под метаданные.

Стандарты XMP

Платформа расширяемых метаданных (XMP) — это стандарт для обработки и хранения информации, относящейся к содержимому файла. Он был создан компанией Adobe Systems Inc. XMP предоставляет стандарты для определения, создания и обработки метаданных . Вы можете встроить этот стандарт в несколько форматов файлов, таких как PDF , JPEG , JPEG , GIF , jpg , HTML и т. Д.

Класс недвижимости

Тика использует класс Property, чтобы следовать определению свойства XMP. Он предоставляет перечисления PropertyType и ValueType для захвата имени и значения метаданных.

Класс метаданных

Этот класс реализует различные интерфейсы, такие как ClimateForcast, CativeCommons, Geographic , 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 .java
java  GetMetadata

Ниже приведен снимок boy.jpg

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”); 

Класс Metadata имеет предопределенные свойства, включая свойства, унаследованные от таких классов, как ClimateForcast, CativeCommons, Geographic и т. Д., Для поддержки различных моделей данных. Ниже показано использование типа данных ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, унаследованного от интерфейса TIFF, реализованного Tika для соответствия стандартам метаданных XMP для форматов изображений TIFF.

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 (). Синтаксис установки нескольких значений для свойства Author с помощью метода set () следующий:

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

Если вы выполните вышеупомянутую программу, она даст вам следующий результат. На выходе вы можете наблюдать недавно добавленные элементы метаданных.