TIKA - Estrazione di metadati
Oltre al contenuto, Tika estrae anche i metadati da un file. I metadati non sono altro che le informazioni aggiuntive fornite con un file. Se consideriamo un file audio, il nome dell'artista, il nome dell'album e il titolo rientrano nei metadati.
Standard XMP
Extensible Metadata Platform (XMP) è uno standard per l'elaborazione e l'archiviazione delle informazioni relative al contenuto di un file. E 'stato creato da Adobe Systems Inc . XMP fornisce standard per la definizione, la creazione e l'elaborazione dei metadati . Puoi incorporare questo standard in diversi formati di file come PDF , JPEG , JPEG , GIF , jpg , HTML ecc.
Classe di proprietà
Tika utilizza la classe Property per seguire la definizione della proprietà XMP. Fornisce le enumerazioni PropertyType e ValueType per acquisire il nome e il valore di un metadati.
Classe di metadati
Questa classe implementa varie interfacce come ClimateForcast , CativeCommons, Geographic , TIFF ecc. Per fornire supporto per vari modelli di metadati. Inoltre, questa classe fornisce vari metodi per estrarre il contenuto da un file.
Nomi dei metadati
Possiamo estrarre l'elenco di tutti i nomi dei metadati di un file dal suo oggetto metadati utilizzando i nomi dei metodi () . Restituisce tutti i nomi come un array di stringhe. Usando il nome dei metadati, possiamo ottenere il valore usando ilget()metodo. Prende un nome di metadati e restituisce un valore ad esso associato.
String[] metadaNames = metadata.names();
String value = metadata.get(name);
Estrazione dei metadati utilizzando il metodo Parse
Ogni volta che analizziamo un file usando parse (), passiamo un oggetto di metadati vuoto come uno dei parametri. Questo metodo estrae i metadati del file specificato (se quel file ne contiene) e li inserisce nell'oggetto metadati. Pertanto, dopo aver analizzato il file utilizzando parse (), possiamo estrarre i metadati da quell'oggetto.
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();
Di seguito è riportato il programma completo per estrarre i metadati da un file di testo.
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));
}
}
}
Salva il codice sopra come GetMetadata.java ed eseguilo dal prompt dei comandi utilizzando i seguenti comandi:
javac GetMetadata .java
java GetMetadata
Di seguito è riportata l'istantanea di boy.jpg
Se esegui il programma sopra, ti darà il seguente output:
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
Possiamo anche ottenere i valori dei metadati desiderati.
Aggiunta di nuovi valori di metadati
Possiamo aggiungere nuovi valori di metadati utilizzando il metodo add () della classe dei metadati. Di seguito è riportata la sintassi di questo metodo. Qui stiamo aggiungendo il nome dell'autore.
metadata.add(“author”,”Tutorials point”);
La classe Metadata ha proprietà predefinite comprese le proprietà ereditate da classi come ClimateForcast , CativeCommons, Geographic , ecc., Per supportare vari modelli di dati. Di seguito viene mostrato l'utilizzo del tipo di dati SOFTWARE ereditato dall'interfaccia TIFF implementata da Tika per seguire gli standard dei metadati XMP per i formati di immagine TIFF.
metadata.add(Metadata.SOFTWARE,"ms paint");
Di seguito è riportato il programma completo che dimostra come aggiungere valori di metadati a un determinato file. Qui l'elenco degli elementi di metadati viene visualizzato nell'output in modo da poter osservare la modifica nell'elenco dopo aver aggiunto nuovi valori.
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()));
}
}
Salva il codice sopra come classe AddMetadata.java ed eseguilo dal prompt dei comandi -
javac AddMetadata .java
java AddMetadata
Di seguito è riportato il contenuto di Example.txt
Hi students welcome to tutorialspoint
Se esegui il programma sopra, ti darà il seguente output:
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]
Impostazione dei valori per gli elementi di metadati esistenti
È possibile impostare valori per gli elementi di metadati esistenti utilizzando il metodo set (). La sintassi per impostare la proprietà date utilizzando il metodo set () è la seguente:
metadata.set(Metadata.DATE, new Date());
È inoltre possibile impostare più valori per le proprietà utilizzando il metodo set (). La sintassi per impostare più valori sulla proprietà Author utilizzando il metodo set () è la seguente:
metadata.set(Metadata.AUTHOR, "ram ,raheem ,robin ");
Di seguito è riportato il programma completo che mostra il metodo 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));
}
}
}
Salva il codice sopra come SetMetadata.java ed eseguilo dal prompt dei comandi -
javac SetMetadata.java
java SetMetadata
Di seguito è riportato il contenuto di example.txt.
Hi students welcome to tutorialspoint
Se esegui il programma precedente, otterrai il seguente output. Nell'output è possibile osservare gli elementi di metadati appena aggiunti.
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