TIKA - Trích xuất siêu dữ liệu
Bên cạnh nội dung, Tika cũng trích xuất siêu dữ liệu từ một tệp. Siêu dữ liệu không là gì ngoài thông tin bổ sung được cung cấp cùng với một tệp. Nếu chúng tôi xem xét một tệp âm thanh, tên nghệ sĩ, tên album, tiêu đề nằm trong siêu dữ liệu.
Tiêu chuẩn XMP
Nền tảng siêu dữ liệu có thể mở rộng (XMP) là một tiêu chuẩn để xử lý và lưu trữ thông tin liên quan đến nội dung của tệp. Nó được tạo ra bởi Adobe Systems Inc . XMP cung cấp các tiêu chuẩn để xác định, tạo và xử lý siêu dữ liệu . Bạn có thể nhúng tiêu chuẩn này vào một số định dạng tệp như PDF , JPEG , JPEG , GIF , jpg , HTML , v.v.
Lớp ưu tiên
Tika sử dụng lớp Thuộc tính để tuân theo định nghĩa thuộc tính XMP. Nó cung cấp các enums PropertyType và ValueType để nắm bắt tên và giá trị của siêu dữ liệu.
Lớp siêu dữ liệu
Lớp này thực hiện các giao diện khác nhau như ClimateForcast , CativeCommons, Geographic , TIFF, v.v. để cung cấp hỗ trợ cho các mô hình siêu dữ liệu khác nhau. Ngoài ra, lớp này cung cấp nhiều phương thức khác nhau để trích xuất nội dung từ tệp.
Tên siêu dữ liệu
Chúng ta có thể trích xuất danh sách tất cả các tên siêu dữ liệu của một tệp từ đối tượng siêu dữ liệu của nó bằng cách sử dụng các tên phương thức () . Nó trả về tất cả các tên dưới dạng một mảng chuỗi. Sử dụng tên của siêu dữ liệu, chúng ta có thể nhận được giá trị bằng cách sử dụngget()phương pháp. Nó nhận một tên siêu dữ liệu và trả về một giá trị được liên kết với nó.
String[] metadaNames = metadata.names();
String value = metadata.get(name);
Giải nén siêu dữ liệu bằng phương pháp phân tích cú pháp
Bất cứ khi nào chúng tôi phân tích cú pháp tệp bằng parse (), chúng tôi truyền một đối tượng siêu dữ liệu trống làm một trong các tham số. Phương pháp này trích xuất siêu dữ liệu của tệp đã cho (nếu tệp đó chứa bất kỳ tệp nào) và đặt chúng vào đối tượng siêu dữ liệu. Do đó, sau khi phân tích cú pháp tệp bằng parse (), chúng ta có thể trích xuất siêu dữ liệu từ đối tượng đó.
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();
Dưới đây là chương trình hoàn chỉnh để trích xuất siêu dữ liệu từ tệp văn bản.
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));
}
}
}
Lưu đoạn mã trên dưới dạng GetMetadata.java và chạy nó từ dấu nhắc lệnh bằng các lệnh sau:
javac GetMetadata .java
java GetMetadata
Dưới đây là ảnh chụp nhanh của boy.jpg
Nếu bạn thực hiện chương trình trên, nó sẽ cung cấp cho bạn kết quả sau:
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
Chúng tôi cũng có thể nhận được các giá trị siêu dữ liệu mong muốn của mình.
Thêm giá trị siêu dữ liệu mới
Chúng ta có thể thêm các giá trị siêu dữ liệu mới bằng phương thức add () của lớp siêu dữ liệu. Dưới đây là cú pháp của phương thức này. Ở đây chúng tôi đang thêm tên tác giả.
metadata.add(“author”,”Tutorials point”);
Lớp Siêu dữ liệu có các thuộc tính được xác định trước bao gồm các thuộc tính được kế thừa từ các lớp như ClimateForcast , CativeCommons, Geographic , v.v., để hỗ trợ các mô hình dữ liệu khác nhau. Hình dưới đây là cách sử dụng kiểu dữ liệu PHẦN MỀM kế thừa từ giao diện TIFF do Tika triển khai để tuân theo tiêu chuẩn siêu dữ liệu XMP cho các định dạng ảnh TIFF.
metadata.add(Metadata.SOFTWARE,"ms paint");
Dưới đây là chương trình hoàn chỉnh trình bày cách thêm giá trị siêu dữ liệu vào một tệp nhất định. Tại đây, danh sách các phần tử siêu dữ liệu được hiển thị trong đầu ra để bạn có thể quan sát sự thay đổi trong danh sách sau khi thêm các giá trị mới.
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()));
}
}
Lưu đoạn mã trên dưới dạng lớp AddMetadata.java và chạy nó từ dấu nhắc lệnh -
javac AddMetadata .java
java AddMetadata
Dưới đây là nội dung của Example.txt
Hi students welcome to tutorialspoint
Nếu bạn thực hiện chương trình trên, nó sẽ cung cấp cho bạn kết quả sau:
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]
Đặt giá trị cho các phần tử siêu dữ liệu hiện có
Bạn có thể đặt giá trị cho các phần tử siêu dữ liệu hiện có bằng phương thức set (). Cú pháp của việc đặt thuộc tính ngày bằng phương thức set () như sau:
metadata.set(Metadata.DATE, new Date());
Bạn cũng có thể đặt nhiều giá trị cho thuộc tính bằng phương thức set (). Cú pháp đặt nhiều giá trị cho thuộc tính Author bằng phương thức set () như sau:
metadata.set(Metadata.AUTHOR, "ram ,raheem ,robin ");
Dưới đây là chương trình hoàn chỉnh trình bày phương thức 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));
}
}
}
Lưu đoạn mã trên dưới dạng SetMetadata.java và chạy nó từ dấu nhắc lệnh -
javac SetMetadata.java
java SetMetadata
Dưới đây là nội dung của example.txt.
Hi students welcome to tutorialspoint
Nếu bạn thực hiện chương trình trên, nó sẽ cung cấp cho bạn kết quả sau. Trong đầu ra, bạn có thể quan sát các phần tử siêu dữ liệu mới được thêm vào.
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