TIKA - Ekstrakcja metadanych

Oprócz treści Tika wyodrębnia również metadane z pliku. Metadane to nic innego jak dodatkowe informacje dostarczane wraz z plikiem. Jeśli weźmiemy pod uwagę plik audio, nazwa wykonawcy, nazwa albumu, tytuł są objęte metadanymi.

Standardy XMP

Extensible Metadata Platform (XMP) to standard przetwarzania i przechowywania informacji związanych z zawartością pliku. Został on stworzony przez firmę Adobe Systems Inc . XMP zapewnia standardy definiowania, tworzenia i przetwarzania metadanych . Możesz osadzić ten standard w kilku formatach plików, takich jak PDF , JPEG , JPEG , GIF , jpg , HTML itp.

Klasa własności

Tika używa klasy Property do przestrzegania definicji właściwości XMP. Udostępnia wyliczenia PropertyType i ValueType do przechwytywania nazwy i wartości metadanych.

Klasa metadanych

Ta klasa implementuje różne interfejsy, takie jak ClimateForcast , CativeCommons, Geographic , TIFF itp., Aby zapewnić obsługę różnych modeli metadanych. Ponadto ta klasa udostępnia różne metody wyodrębniania zawartości z pliku.

Nazwy metadanych

Możemy wyodrębnić listę wszystkich nazw metadanych pliku z jego obiektu metadanych przy użyciu nazw metod () . Zwraca wszystkie nazwy jako tablicę ciągów. Korzystając z nazwy metadanych, możemy uzyskać wartość za pomocąget()metoda. Pobiera nazwę metadanych i zwraca wartość z nią skojarzoną.

String[] metadaNames = metadata.names();

String value = metadata.get(name);

Wyodrębnianie metadanych przy użyciu metody analizy

Za każdym razem, gdy parsujemy plik za pomocą parse (), jako jeden z parametrów przekazujemy pusty obiekt metadanych. Ta metoda wyodrębnia metadane z danego pliku (jeśli ten plik zawiera jakieś) i umieszcza je w obiekcie metadanych. Dlatego po przeanalizowaniu pliku za pomocą parse () możemy wyodrębnić metadane z tego obiektu.

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

Poniżej podano kompletny program do wyodrębniania metadanych z pliku tekstowego.

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

Zapisz powyższy kod jako GetMetadata.java i uruchom go z wiersza poleceń za pomocą następujących poleceń -

javac  GetMetadata .java
java  GetMetadata

Poniżej znajduje się migawka pliku boy.jpg

Jeśli wykonasz powyższy program, da ci on następujący wynik -

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

Możemy również uzyskać pożądane wartości metadanych.

Dodawanie nowych wartości metadanych

Nowe wartości metadanych możemy dodawać za pomocą metody add () klasy metadanych. Poniżej podano składnię tej metody. Tutaj dodajemy nazwisko autora.

metadata.add(“author”,”Tutorials point”);

Klasa Metadata ma predefiniowane właściwości, w tym właściwości dziedziczone z klas, takich jak ClimateForcast , CativeCommons, Geographic itp., W celu obsługi różnych modeli danych. Poniżej pokazano użycie typu danych OPROGRAMOWANIE odziedziczonego z interfejsu TIFF zaimplementowanego przez Tika w celu przestrzegania standardów metadanych XMP dla formatów obrazów TIFF.

metadata.add(Metadata.SOFTWARE,"ms paint");

Poniżej podano kompletny program, który pokazuje, jak dodać wartości metadanych do danego pliku. Tutaj lista elementów metadanych jest wyświetlana na wyjściu, dzięki czemu można obserwować zmianę na liście po dodaniu nowych wartości.

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()));
   }
}

Zapisz powyższy kod jako klasę AddMetadata.java i uruchom go z wiersza poleceń -

javac  AddMetadata .java 
java  AddMetadata

Poniżej podano zawartość pliku Example.txt

Hi students welcome to tutorialspoint

Jeśli wykonasz powyższy program, da ci on następujący wynik -

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]

Ustawianie wartości dla istniejących elementów metadanych

Możesz ustawić wartości dla istniejących elementów metadanych za pomocą metody set (). Składnia ustawiania właściwości daty za pomocą metody set () jest następująca -

metadata.set(Metadata.DATE, new Date());

Możesz również ustawić wiele wartości dla właściwości za pomocą metody set (). Składnia ustawiania wielu wartości właściwości Autor za pomocą metody set () jest następująca -

metadata.set(Metadata.AUTHOR, "ram ,raheem ,robin ");

Poniżej podano kompletny program demonstrujący metodę 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));
      }
   }
}

Zapisz powyższy kod jako SetMetadata.java i uruchom go z wiersza polecenia -

javac  SetMetadata.java 
java  SetMetadata

Poniżej podano zawartość example.txt.

Hi students welcome to tutorialspoint

Jeśli wykonasz powyższy program, otrzymasz następujące dane wyjściowe. W danych wyjściowych można obserwować nowo dodane elementy metadanych.

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