TIKA - การแยกเนื้อหา

Tika ใช้ไลบรารีตัวแยกวิเคราะห์ต่างๆเพื่อแยกเนื้อหาจากตัวแยกวิเคราะห์ที่กำหนด เลือกตัวแยกวิเคราะห์ที่เหมาะสมสำหรับการแยกประเภทเอกสารที่กำหนด

สำหรับการแยกวิเคราะห์เอกสารโดยทั่วไปจะใช้เมธอด parseToString () ของคลาส Tika facade ด้านล่างนี้เป็นขั้นตอนที่เกี่ยวข้องกับกระบวนการแยกวิเคราะห์และสิ่งเหล่านี้ถูกสรุปโดยวิธี Tika ParsertoString ()

การแยกกระบวนการแยกวิเคราะห์ -

  • เริ่มแรกเมื่อเราส่งเอกสารไปยัง Tika จะใช้กลไกการตรวจจับประเภทที่เหมาะสมที่มีอยู่และตรวจจับประเภทเอกสาร

  • เมื่อทราบชนิดเอกสารแล้วจะเลือกตัวแยกวิเคราะห์ที่เหมาะสมจากที่เก็บตัวแยกวิเคราะห์ ที่เก็บตัวแยกวิเคราะห์มีคลาสที่ใช้ไลบรารีภายนอก

  • จากนั้นเอกสารจะถูกส่งไปเพื่อเลือกตัวแยกวิเคราะห์ซึ่งจะแยกวิเคราะห์เนื้อหาแยกข้อความและโยนข้อยกเว้นสำหรับรูปแบบที่อ่านไม่ได้

การแยกเนื้อหาโดยใช้ Tika

ด้านล่างนี้เป็นโปรแกรมสำหรับการแยกข้อความจากไฟล์โดยใช้คลาส Tika facade -

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

บันทึกรหัสด้านบนเป็น TikaExtraction.java และเรียกใช้จากพรอมต์คำสั่ง -

javac TikaExtraction.java 
java TikaExtraction

ด้านล่างนี้เป็นเนื้อหาของ sample.txt

Hi students welcome to tutorialspoint

ให้ผลลัพธ์ดังต่อไปนี้ -

Extracted Content: Hi students welcome to tutorialspoint

การแยกเนื้อหาโดยใช้ Parser Interface

แพ็กเกจตัวแยกวิเคราะห์ของ Tika มีอินเทอร์เฟซและคลาสต่างๆที่เราสามารถแยกวิเคราะห์เอกสารข้อความได้ ด้านล่างเป็นแผนภาพบล็อกของไฟล์org.apache.tika.parser แพ็คเกจ

มีคลาส parser หลายแบบเช่น pdf parser, Mp3Passer, OfficeParser ฯลฯ เพื่อแยกวิเคราะห์เอกสารตามลำดับ คลาสเหล่านี้ทั้งหมดใช้อินเทอร์เฟซตัวแยกวิเคราะห์

CompositeParser

แผนภาพที่ระบุแสดงคลาส parser วัตถุประสงค์ทั่วไปของ Tika: CompositeParser และ AutoDetectParser. เนื่องจากคลาส CompositeParser เป็นไปตามรูปแบบการออกแบบคอมโพสิตคุณจึงสามารถใช้กลุ่มของอินสแตนซ์ตัวแยกวิเคราะห์เป็นตัวแยกวิเคราะห์เดียว คลาส CompositeParser ยังอนุญาตให้เข้าถึงคลาสทั้งหมดที่ใช้อินเตอร์เฟสตัวแยกวิเคราะห์

AutoDetectParser

นี่คือคลาสย่อยของ CompositeParser และมีการตรวจจับประเภทอัตโนมัติ การใช้ฟังก์ชันนี้ AutoDetectParser จะส่งเอกสารขาเข้าโดยอัตโนมัติไปยังคลาส parser ที่เหมาะสมโดยใช้วิธีการแบบผสม

parse () วิธีการ

นอกจาก parseToString () แล้วคุณยังสามารถใช้เมธอด parse () ของ parser Interface ได้อีกด้วย ต้นแบบของวิธีนี้แสดงไว้ด้านล่าง

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

ตารางต่อไปนี้แสดงรายการวัตถุสี่รายการที่ยอมรับเป็นพารามิเตอร์

ซีเนียร์ วัตถุและคำอธิบาย
1

InputStream stream

ออบเจ็กต์ Inputstream ใด ๆ ที่มีเนื้อหาของไฟล์

2

ContentHandler handler

Tika ส่งเอกสารเป็นเนื้อหา XHTML ไปยังตัวจัดการนี้หลังจากนั้นเอกสารจะถูกประมวลผลโดยใช้ SAX API ช่วยให้การประมวลผลเนื้อหาในเอกสารหลังการประมวลผลมีประสิทธิภาพ

3

Metadata metadata

ออบเจ็กต์ข้อมูลเมตาถูกใช้เป็นทั้งต้นทางและเป้าหมายของข้อมูลเมตาของเอกสาร

4

ParseContext context

อ็อบเจ็กต์นี้ใช้ในกรณีที่ไคลเอนต์แอ็พพลิเคชันต้องการปรับแต่งกระบวนการแยกวิเคราะห์

ตัวอย่าง

ด้านล่างนี้เป็นตัวอย่างที่แสดงวิธีการใช้ parse () วิธีการ

Step 1 -

ในการใช้เมธอด parse () ของส่วนต่อประสาน parser ให้สร้างอินสแตนซ์ของคลาสใด ๆ ที่ให้การใช้งานสำหรับอินเทอร์เฟซนี้

มีคลาสตัวแยกวิเคราะห์แต่ละคลาสเช่น PDFParser, OfficeParser, XMLParser เป็นต้นคุณสามารถใช้ตัวแยกวิเคราะห์เอกสารใด ๆ เหล่านี้ได้ หรือคุณสามารถใช้ CompositeParser หรือ AutoDetectParser ที่ใช้คลาส parser ทั้งหมดภายในและแยกเนื้อหาของเอกสารโดยใช้ parser ที่เหมาะสม

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

Step 2 -

สร้างอ็อบเจ็กต์คลาสตัวจัดการ ด้านล่างนี้คือตัวจัดการเนื้อหาสามตัว -

ซีเนียร์ ชั้นเรียนและคำอธิบาย
1

BodyContentHandler

คลาสนี้เลือกส่วนเนื้อหาของเอาต์พุต XHTML และเขียนเนื้อหานั้นไปยังตัวเขียนเอาต์พุตหรือเอาต์พุตสตรีม จากนั้นจะเปลี่ยนเส้นทางเนื้อหา XHTML ไปยังอินสแตนซ์ตัวจัดการเนื้อหาอื่น

2

LinkContentHandler

คลาสนี้จะตรวจจับและเลือกแท็ก H-Ref ทั้งหมดของเอกสาร XHTML และส่งต่อสำหรับการใช้เครื่องมือเช่นโปรแกรมรวบรวมข้อมูลเว็บ

3

TeeContentHandler

คลาสนี้ช่วยในการใช้เครื่องมือหลายอย่างพร้อมกัน

เนื่องจากเป้าหมายของเราคือการแยกเนื้อหาข้อความจากเอกสารให้สร้างอินสแตนซ์ BodyContentHandler ดังที่แสดงด้านล่าง -

BodyContentHandler handler = new BodyContentHandler( );

Step 3 -

สร้างวัตถุ Metadata ดังที่แสดงด้านล่าง -

Metadata metadata = new Metadata();

Step 4 -

สร้างอ็อบเจ็กต์สตรีมอินพุตใด ๆ และส่งไฟล์ของคุณที่ควรแตกออกไป

FileInputstream

สร้างอินสแตนซ์อ็อบเจ็กต์ไฟล์โดยส่งพา ธ ไฟล์เป็นพารามิเตอร์และส่งอ็อบเจ็กต์นี้ไปยังคอนสตรัคเตอร์คลาส FileInputStream

Note - เส้นทางที่ส่งผ่านไปยังวัตถุไฟล์ไม่ควรมีช่องว่าง

ปัญหาของคลาสสตรีมอินพุตเหล่านี้คือไม่รองรับการอ่านแบบเข้าถึงโดยสุ่มซึ่งจำเป็นในการประมวลผลไฟล์บางรูปแบบอย่างมีประสิทธิภาพ เพื่อแก้ไขปัญหานี้ Tika ให้ TikaInputStream

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

Step 5 -

สร้างวัตถุบริบทแยกวิเคราะห์ดังที่แสดงด้านล่าง -

ParseContext context =new ParseContext();

Step 6 -

สร้างอินสแตนซ์อ็อบเจ็กต์ parser เรียกใช้เมธอด parse และส่งผ่านอ็อบเจ็กต์ทั้งหมดที่ต้องการดังแสดงในต้นแบบด้านล่าง -

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

ด้านล่างนี้เป็นโปรแกรมสำหรับการแยกเนื้อหาโดยใช้อินเทอร์เฟซตัวแยกวิเคราะห์ -

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

บันทึกรหัสด้านบนเป็น ParserExtraction.java และเรียกใช้จากพรอมต์คำสั่ง -

javac  ParserExtraction.java 
java  ParserExtraction

ด้านล่างนี้เป็นเนื้อหาของ sample.txt

Hi students welcome to tutorialspoint

หากคุณรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังต่อไปนี้ -

File content : Hi students welcome to tutorialspoint