TIKA - Trích xuất nội dung

Tika sử dụng các thư viện phân tích cú pháp khác nhau để trích xuất nội dung từ các trình phân tích cú pháp nhất định. Nó chọn trình phân tích cú pháp phù hợp để trích xuất loại tài liệu đã cho.

Để phân tích cú pháp tài liệu, phương thức parseToString () của lớp mặt tiền Tika thường được sử dụng. Dưới đây là các bước liên quan đến quá trình phân tích cú pháp và chúng được trừu tượng hóa bằng phương thức Tika ParsertoString ().

Tóm tắt quá trình phân tích cú pháp -

  • Ban đầu khi chúng tôi chuyển một tài liệu cho Tika, nó sử dụng một cơ chế phát hiện loại phù hợp có sẵn với nó và phát hiện loại tài liệu.

  • Khi đã biết loại tài liệu, nó sẽ chọn một trình phân tích cú pháp phù hợp từ kho lưu trữ trình phân tích cú pháp của nó. Kho phân tích cú pháp chứa các lớp sử dụng thư viện bên ngoài.

  • Sau đó, tài liệu được chuyển để chọn trình phân tích cú pháp sẽ phân tích cú pháp nội dung, trích xuất văn bản và cũng đưa ra các ngoại lệ cho các định dạng không đọc được.

Trích xuất nội dung bằng Tika

Dưới đây là chương trình trích xuất văn bản từ một tệp bằng cách sử dụng lớp mặt tiền Tika -

import java.io.File;
import java.io.IOException;

import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;

import org.xml.sax.SAXException;

public class TikaExtraction {
	
   public static void main(final String[] args) throws IOException, TikaException {

      //Assume sample.txt is in your current directory		        
      File file = new File("sample.txt");
      
      //Instantiating Tika facade class
      Tika tika = new Tika();
      String filecontent = tika.parseToString(file);
      System.out.println("Extracted Content: " + filecontent);
   }		 
}

Lưu đoạn mã trên dưới dạng TikaExtraction.java và chạy nó từ dấu nhắc lệnh -

javac TikaExtraction.java 
java TikaExtraction

Dưới đây là nội dung của sample.txt.

Hi students welcome to tutorialspoint

Nó cung cấp cho bạn kết quả sau:

Extracted Content: Hi students welcome to tutorialspoint

Trích xuất nội dung bằng Giao diện phân tích cú pháp

Gói phân tích cú pháp của Tika cung cấp một số giao diện và lớp sử dụng mà chúng ta có thể phân tích cú pháp một tài liệu văn bản. Dưới đây là sơ đồ khối củaorg.apache.tika.parser gói hàng.

Có một số lớp phân tích cú pháp có sẵn, ví dụ: trình phân tích cú pháp pdf, Mp3Passer, OfficeParser, v.v., để phân tích cú pháp các tài liệu tương ứng riêng lẻ. Tất cả các lớp này thực hiện giao diện phân tích cú pháp.

CompositeParser

Sơ đồ đã cho cho thấy các lớp phân tích cú pháp mục đích chung của Tika: CompositeParserAutoDetectParser. Vì lớp CompositeParser tuân theo mẫu thiết kế hỗn hợp, bạn có thể sử dụng một nhóm các thể hiện trình phân tích cú pháp như một trình phân tích cú pháp duy nhất. Lớp CompositeParser cũng cho phép truy cập vào tất cả các lớp thực hiện giao diện phân tích cú pháp.

AutoDetectParser

Đây là một lớp con của CompositeParser và nó cung cấp khả năng phát hiện kiểu tự động. Sử dụng chức năng này, AutoDetectParser tự động gửi tài liệu đến các lớp phân tích cú pháp thích hợp bằng cách sử dụng phương pháp tổng hợp.

phương thức parse ()

Cùng với parseToString (), bạn cũng có thể sử dụng phương thức parse () của Giao diện phân tích cú pháp. Nguyên mẫu của phương pháp này được hiển thị bên dưới.

parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context)

Bảng sau liệt kê bốn đối tượng mà nó chấp nhận làm tham số.

Sr.No. Mô tả đối tượng
1

InputStream stream

Bất kỳ đối tượng Inputstream nào có chứa nội dung của tệp

2

ContentHandler handler

Tika chuyển tài liệu dưới dạng nội dung XHTML cho trình xử lý này, sau đó tài liệu được xử lý bằng SAX API. Nó cung cấp quá trình hậu xử lý nội dung trong tài liệu một cách hiệu quả.

3

Metadata metadata

Đối tượng siêu dữ liệu được sử dụng vừa làm nguồn vừa là đích của siêu dữ liệu tài liệu.

4

ParseContext context

Đối tượng này được sử dụng trong trường hợp ứng dụng khách muốn tùy chỉnh quá trình phân tích cú pháp.

Thí dụ

Dưới đây là một ví dụ cho thấy phương thức parse () được sử dụng như thế nào.

Step 1 -

Để sử dụng phương thức parse () của giao diện phân tích cú pháp, hãy khởi tạo bất kỳ lớp nào trong số các lớp cung cấp việc triển khai cho giao diện này.

Có các lớp phân tích cú pháp riêng lẻ chẳng hạn như PDFParser, OfficeParser, XMLParser, v.v. Bạn có thể sử dụng bất kỳ trình phân tích cú pháp tài liệu riêng lẻ nào. Ngoài ra, bạn có thể sử dụng CompositeParser hoặc AutoDetectParser sử dụng tất cả các lớp phân tích cú pháp nội bộ và trích xuất nội dung của tài liệu bằng trình phân tích cú pháp thích hợp.

Parser parser = new AutoDetectParser();
   (or)
Parser parser = new CompositeParser();  
   (or)        
object of any individual parsers given in Tika Library

Step 2 -

Tạo một đối tượng lớp xử lý. Dưới đây là ba trình xử lý nội dung -

Sr.No. Lớp & Mô tả
1

BodyContentHandler

Lớp này chọn phần nội dung của đầu ra XHTML và ghi nội dung đó vào trình ghi đầu ra hoặc luồng đầu ra. Sau đó, nó chuyển hướng nội dung XHTML đến một phiên bản xử lý nội dung khác.

2

LinkContentHandler

Lớp này phát hiện và chọn tất cả các thẻ H-Ref của tài liệu XHTML và chuyển tiếp các thẻ đó để sử dụng các công cụ như trình thu thập thông tin web.

3

TeeContentHandler

Lớp này giúp sử dụng nhiều công cụ đồng thời.

Vì mục tiêu của chúng tôi là trích xuất nội dung văn bản từ một tài liệu, hãy khởi tạo BodyContentHandler như hình dưới đây:

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

Tạo đối tượng Siêu dữ liệu như hình dưới đây -

Metadata metadata = new Metadata();

Step 4 -

Tạo bất kỳ đối tượng luồng đầu vào nào và chuyển tệp của bạn cần được giải nén vào đó.

FileInputstream

Khởi tạo một đối tượng tệp bằng cách chuyển đường dẫn tệp dưới dạng tham số và chuyển đối tượng này tới phương thức khởi tạo lớp FileInputStream.

Note - Đường dẫn đến đối tượng tệp không được chứa khoảng trắng.

Vấn đề với các lớp luồng đầu vào này là chúng không hỗ trợ đọc truy cập ngẫu nhiên, điều này được yêu cầu để xử lý một số định dạng tệp một cách hiệu quả. Để giải quyết vấn đề này, Tika cung cấp TikaInputStream.

File  file = new File(filepath)
FileInputStream inputstream = new FileInputStream(file);
   (or)
InputStream stream = TikaInputStream.get(new File(filename));

Step 5 -

Tạo một đối tượng ngữ cảnh phân tích cú pháp như hình dưới đây -

ParseContext context =new ParseContext();

Step 6 -

Khởi tạo đối tượng phân tích cú pháp, gọi phương thức phân tích cú pháp và chuyển tất cả các đối tượng được yêu cầu, như được hiển thị trong nguyên mẫu bên dưới -

parser.parse(inputstream, handler, metadata, context);

Dưới đây là chương trình trích xuất nội dung bằng giao diện phân tích cú pháp -

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 ParserExtraction {
	
   public static void main(final String[] args) throws IOException,SAXException, TikaException {

      //Assume sample.txt is in your current directory
      File file = new File("sample.txt");
      
      //parse 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 file
      parser.parse(inputstream, handler, metadata, context);
      System.out.println("File content : " + Handler.toString());
   }
}

Lưu đoạn mã trên dưới dạng ParserExtraction.java và chạy nó từ dấu nhắc lệnh -

javac  ParserExtraction.java 
java  ParserExtraction

Dưới đây là nội dung của sample.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:

File content : Hi students welcome to tutorialspoint