TIKA - Metadatenextraktion
Neben dem Inhalt extrahiert Tika auch die Metadaten aus einer Datei. Metadaten sind nichts anderes als die zusätzlichen Informationen, die mit einer Datei geliefert werden. Wenn wir eine Audiodatei betrachten, werden der Künstlername, der Albumname und der Titel unter Metadaten angezeigt.
XMP-Standards
Die Extensible Metadata Platform (XMP) ist ein Standard zum Verarbeiten und Speichern von Informationen zum Inhalt einer Datei. Es wurde von Adobe Systems Inc. Erstellt . XMP bietet Standards zum Definieren, Erstellen und Verarbeiten von Metadaten . Sie können diesen Standard in verschiedene Dateiformate wie PDF , JPEG , JPEG , GIF , JPG , HTML usw. einbetten .
Immobilienklasse
Tika verwendet die Property-Klasse, um der XMP-Eigenschaftsdefinition zu folgen. Es enthält die Aufzählungen PropertyType und ValueType , um den Namen und den Wert von Metadaten zu erfassen.
Metadatenklasse
Diese Klasse implementiert verschiedene Schnittstellen wie ClimateForcast , CativeCommons, Geographic , TIFF usw., um verschiedene Metadatenmodelle zu unterstützen. Darüber hinaus bietet diese Klasse verschiedene Methoden zum Extrahieren des Inhalts aus einer Datei.
Metadatennamen
Mit den Methodennamen () können wir die Liste aller Metadatennamen einer Datei aus ihrem Metadatenobjekt extrahieren . Es gibt alle Namen als String-Array zurück. Mit dem Namen der Metadaten können wir den Wert mit dem abrufenget()Methode. Es nimmt einen Metadatennamen an und gibt einen damit verbundenen Wert zurück.
String[] metadaNames = metadata.names();
String value = metadata.get(name);
Extrahieren von Metadaten mit der Analysemethode
Immer wenn wir eine Datei mit parse () analysieren, übergeben wir ein leeres Metadatenobjekt als einen der Parameter. Diese Methode extrahiert die Metadaten der angegebenen Datei (falls diese Datei welche enthält) und platziert sie im Metadatenobjekt. Daher können wir nach dem Parsen der Datei mit parse () die Metadaten aus diesem Objekt extrahieren.
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();
Im Folgenden finden Sie das vollständige Programm zum Extrahieren von Metadaten aus einer Textdatei.
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));
}
}
}
Speichern Sie den obigen Code als GetMetadata.java und führen Sie ihn an der Eingabeaufforderung mit den folgenden Befehlen aus:
javac GetMetadata .java
java GetMetadata
Unten ist der Schnappschuss von boy.jpg angegeben
Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe:
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
Wir können auch unsere gewünschten Metadatenwerte erhalten.
Hinzufügen neuer Metadatenwerte
Wir können neue Metadatenwerte mit der add () -Methode der Metadatenklasse hinzufügen. Nachstehend ist die Syntax dieser Methode angegeben. Hier fügen wir den Autorennamen hinzu.
metadata.add(“author”,”Tutorials point”);
Die Metadatenklasse verfügt über vordefinierte Eigenschaften, einschließlich der Eigenschaften, die von Klassen wie ClimateForcast , CativeCommons, Geographic usw. geerbt wurden, um verschiedene Datenmodelle zu unterstützen. Im Folgenden wird die Verwendung des SOFTWARE-Datentyps gezeigt, der von der von Tika implementierten TIFF-Schnittstelle geerbt wurde, um den XMP-Metadatenstandards für TIFF-Bildformate zu folgen.
metadata.add(Metadata.SOFTWARE,"ms paint");
Im Folgenden finden Sie das vollständige Programm, das zeigt, wie Sie einer bestimmten Datei Metadatenwerte hinzufügen. Hier wird die Liste der Metadatenelemente in der Ausgabe angezeigt, damit Sie die Änderung in der Liste nach dem Hinzufügen neuer Werte beobachten können.
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()));
}
}
Speichern Sie den obigen Code als AddMetadata.java-Klasse und führen Sie ihn an der Eingabeaufforderung aus.
javac AddMetadata .java
java AddMetadata
Unten ist der Inhalt von Example.txt angegeben
Hi students welcome to tutorialspoint
Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe:
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]
Festlegen von Werten für vorhandene Metadatenelemente
Mit der Methode set () können Sie Werte für die vorhandenen Metadatenelemente festlegen. Die Syntax zum Festlegen der Datumseigenschaft mithilfe der set () -Methode lautet wie folgt:
metadata.set(Metadata.DATE, new Date());
Sie können mit der Methode set () auch mehrere Werte für die Eigenschaften festlegen. Die Syntax zum Festlegen mehrerer Werte für die Author-Eigenschaft mithilfe der set () -Methode lautet wie folgt:
metadata.set(Metadata.AUTHOR, "ram ,raheem ,robin ");
Im Folgenden finden Sie das vollständige Programm, das die set () -Methode demonstriert.
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));
}
}
}
Speichern Sie den obigen Code als SetMetadata.java und führen Sie ihn an der Eingabeaufforderung aus.
javac SetMetadata.java
java SetMetadata
Unten ist der Inhalt von example.txt angegeben.
Hi students welcome to tutorialspoint
Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe. In der Ausgabe können Sie die neu hinzugefügten Metadatenelemente beobachten.
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