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