TIKA-메타 데이터 추출

콘텐츠 외에도 Tika는 파일에서 메타 데이터를 추출합니다. 메타 데이터는 파일과 함께 제공되는 추가 정보 일뿐입니다. 오디오 파일을 고려하면 아티스트 이름, 앨범 이름, 제목이 메타 데이터 아래에 있습니다.

XMP 표준

XMP (Extensible Metadata Platform)는 파일 내용과 관련된 정보를 처리하고 저장하기위한 표준입니다. Adobe Systems Inc. 에서 만들었습니다 . XMP는 메타 데이터의 정의, 생성 및 처리를위한 표준을 제공합니다 . 이 표준을 PDF , JPEG , JPEG , GIF , jpg , HTML 등과 같은 여러 파일 형식에 포함 할 수 있습니다 .

속성 클래스

Tika는 Property 클래스를 사용하여 XMP 속성 정의를 따릅니다. 메타 데이터의 이름과 값을 캡처하기 위해 PropertyType 및 ValueType 열거 형을 제공합니다 .

메타 데이터 클래스

이 클래스는 ClimateForcast , CativeCommons, Geographic , TIFF 등과 같은 다양한 인터페이스를 구현 하여 다양한 메타 데이터 모델을 지원합니다. 또한이 클래스는 파일에서 콘텐츠를 추출하는 다양한 메서드를 제공합니다.

메타 데이터 이름

names () 메서드를 사용하여 메타 데이터 객체에서 파일의 모든 메타 데이터 이름 목록을 추출 할 수 있습니다 . 모든 이름을 문자열 배열로 반환합니다. 메타 데이터의 이름을 사용하여 다음을 사용하여 값을 얻을 수 있습니다.get()방법. 메타 데이터 이름을 가져와 연관된 값을 반환합니다.

String[] metadaNames = metadata.names();

String value = metadata.get(name);

Parse 메서드를 사용하여 메타 데이터 추출

parse ()를 사용하여 파일을 구문 분석 할 때마다 빈 메타 데이터 객체를 매개 변수 중 하나로 전달합니다. 이 메서드는 지정된 파일의 메타 데이터를 추출하고 (파일에 포함 된 경우) 메타 데이터 개체에 배치합니다. 따라서 parse ()를 사용하여 파일을 구문 분석 한 후 해당 객체에서 메타 데이터를 추출 할 수 있습니다.

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

다음은 텍스트 파일에서 메타 데이터를 추출하는 완전한 프로그램입니다.

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

위 코드를 GetMetadata.java로 저장하고 다음 명령을 사용하여 명령 프롬프트에서 실행하십시오.

javac  GetMetadata .java
java  GetMetadata

아래는 boy.jpg의 스냅 샷입니다.

위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.

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

원하는 메타 데이터 값도 얻을 수 있습니다.

새 메타 데이터 값 추가

메타 데이터 클래스의 add () 메서드를 사용하여 새 메타 데이터 값을 추가 할 수 있습니다. 이 메서드의 구문은 다음과 같습니다. 여기에 저자 이름을 추가합니다.

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

Metadata 클래스에는 다양한 데이터 모델을 지원하기 위해 ClimateForcast , CativeCommons, Geographic 등과 같은 클래스에서 상속 된 속성을 포함하여 미리 정의 된 속성이 있습니다 . 다음은 TIFF 이미지 형식에 대한 XMP 메타 데이터 표준을 따르기 위해 Tika에서 구현 한 TIFF 인터페이스에서 상속 된 SOFTWARE 데이터 유형의 사용입니다.

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

다음은 주어진 파일에 메타 데이터 값을 추가하는 방법을 보여주는 완전한 프로그램입니다. 여기에 메타 데이터 요소 목록이 출력에 표시되므로 새 값을 추가 한 후 목록의 변경 사항을 관찰 할 수 있습니다.

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

위 코드를 AddMetadata.java 클래스로 저장하고 명령 프롬프트에서 실행하십시오.

javac  AddMetadata .java 
java  AddMetadata

다음은 Example.txt의 내용입니다.

Hi students welcome to tutorialspoint

위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.

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]

기존 메타 데이터 요소에 값 설정

set () 메서드를 사용하여 기존 메타 데이터 요소에 값을 설정할 수 있습니다. set () 메서드를 사용하여 날짜 속성을 설정하는 구문은 다음과 같습니다.

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

set () 메서드를 사용하여 속성에 여러 값을 설정할 수도 있습니다. set () 메서드를 사용하여 Author 속성에 여러 값을 설정하는 구문은 다음과 같습니다.

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

아래에 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));
      }
   }
}

위 코드를 SetMetadata.java로 저장하고 명령 프롬프트에서 실행하십시오.

javac  SetMetadata.java 
java  SetMetadata

다음은 example.txt의 내용입니다.

Hi students welcome to tutorialspoint

위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다. 출력에서 새로 추가 된 메타 데이터 요소를 관찰 할 수 있습니다.

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