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