TIKA - Extraction de métadonnées

Outre le contenu, Tika extrait également les métadonnées d'un fichier. Les métadonnées ne sont rien d'autre que les informations supplémentaires fournies avec un fichier. Si l'on considère un fichier audio, le nom de l'artiste, le nom de l'album, le titre font partie des métadonnées.

Normes XMP

La plate-forme de métadonnées extensible (XMP) est une norme pour le traitement et le stockage des informations relatives au contenu d'un fichier. Il a été créé par Adobe Systems Inc . XMP fournit des normes pour définir, créer et traiter les métadonnées . Vous pouvez intégrer cette norme dans plusieurs formats de fichiers tels que PDF , JPEG , JPEG , GIF , jpg , HTML, etc.

Classe de propriété

Tika utilise la classe Property pour suivre la définition de propriété XMP. Il fournit les énumérations PropertyType et ValueType pour capturer le nom et la valeur d'une métadonnée.

Classe de métadonnées

Cette classe implémente diverses interfaces telles que ClimateForcast , CativeCommons, Geographic , TIFF, etc. pour prendre en charge divers modèles de métadonnées. De plus, cette classe fournit diverses méthodes pour extraire le contenu d'un fichier.

Noms des métadonnées

Nous pouvons extraire la liste de tous les noms de métadonnées d'un fichier à partir de son objet de métadonnées en utilisant la méthode names () . Il renvoie tous les noms sous forme de tableau de chaînes. En utilisant le nom des métadonnées, nous pouvons obtenir la valeur en utilisant leget()méthode. Il prend un nom de métadonnées et renvoie une valeur qui lui est associée.

String[] metadaNames = metadata.names();

String value = metadata.get(name);

Extraction de métadonnées à l'aide de la méthode Parse

Chaque fois que nous analysons un fichier à l'aide de parse (), nous passons un objet de métadonnées vide comme l'un des paramètres. Cette méthode extrait les métadonnées du fichier donné (si ce fichier en contient) et les place dans l'objet de métadonnées. Par conséquent, après avoir analysé le fichier à l'aide de parse (), nous pouvons extraire les métadonnées de cet objet.

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

Vous trouverez ci-dessous le programme complet pour extraire les métadonnées d'un fichier texte.

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

Enregistrez le code ci-dessus sous GetMetadata.java et exécutez-le à partir de l'invite de commande à l'aide des commandes suivantes -

javac  GetMetadata .java
java  GetMetadata

Ci-dessous, un instantané de boy.jpg

Si vous exécutez le programme ci-dessus, il vous donnera la sortie suivante -

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

Nous pouvons également obtenir les valeurs de métadonnées souhaitées.

Ajout de nouvelles valeurs de métadonnées

Nous pouvons ajouter de nouvelles valeurs de métadonnées en utilisant la méthode add () de la classe de métadonnées. Voici la syntaxe de cette méthode. Ici, nous ajoutons le nom de l'auteur.

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

La classe Metadata a des propriétés prédéfinies, y compris les propriétés héritées de classes telles que ClimateForcast , CativeCommons, Geographic , etc., pour prendre en charge divers modèles de données. Vous trouverez ci-dessous l'utilisation du type de données LOGICIEL hérité de l'interface TIFF implémentée par Tika pour suivre les normes de métadonnées XMP pour les formats d'image TIFF.

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

Vous trouverez ci-dessous le programme complet qui montre comment ajouter des valeurs de métadonnées à un fichier donné. Ici, la liste des éléments de métadonnées est affichée dans la sortie afin que vous puissiez observer le changement dans la liste après l'ajout de nouvelles valeurs.

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

Enregistrez le code ci-dessus en tant que classe AddMetadata.java et exécutez-le à partir de l'invite de commande -

javac  AddMetadata .java 
java  AddMetadata

Ci-dessous, le contenu de Example.txt

Hi students welcome to tutorialspoint

Si vous exécutez le programme ci-dessus, il vous donnera la sortie suivante -

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]

Définition des valeurs des éléments de métadonnées existants

Vous pouvez définir des valeurs pour les éléments de métadonnées existants à l'aide de la méthode set (). La syntaxe de définition de la propriété date à l'aide de la méthode set () est la suivante:

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

Vous pouvez également définir plusieurs valeurs pour les propriétés à l'aide de la méthode set (). La syntaxe de la définition de plusieurs valeurs de la propriété Author à l'aide de la méthode set () est la suivante:

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

Vous trouverez ci-dessous le programme complet démontrant la méthode 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));
      }
   }
}

Enregistrez le code ci-dessus sous SetMetadata.java et exécutez-le à partir de l'invite de commande -

javac  SetMetadata.java 
java  SetMetadata

Ci-dessous se trouve le contenu de example.txt.

Hi students welcome to tutorialspoint

Si vous exécutez le programme ci-dessus, il vous donnera la sortie suivante. Dans la sortie, vous pouvez observer les éléments de métadonnées nouvellement ajoutés.

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