Java Technologies Multiple Files থেকে Content Extraction করা গাইড ও নোট

366

Apache Tika একটি শক্তিশালী টুল যা বিভিন্ন ফাইল ফরম্যাট থেকে কনটেন্ট এবং মেটাডেটা এক্সট্র্যাক্ট করতে ব্যবহৃত হয়। Tika একক ফাইল থেকে কনটেন্ট এক্সট্র্যাক্ট করার পাশাপাশি একাধিক ফাইল থেকেও কনটেন্ট এক্সট্র্যাক্ট করতে পারে। Multiple files from directories বা batch files processing এর ক্ষেত্রে Tika খুবই কার্যকরী।

এই নিবন্ধে, আমরা দেখব Apache Tika দিয়ে কীভাবে একাধিক ফাইল থেকে কনটেন্ট এক্সট্র্যাক্ট করা যায়, এবং একাধিক ফাইল বা ডিরেক্টরি থেকে ডেটা একসাথে প্রসেস করার একটি উদাহরণ দেখব।


1. Multiple Files থেকে Content Extraction করার প্রয়োজনীয়তা

অনেক সময় বিভিন্ন ফাইল থেকে কনটেন্ট এক্সট্র্যাক্ট করা হয় একযোগভাবে, যেমন একটি ডিরেক্টরিতে হাজার হাজার ফাইল থাকতে পারে এবং সেগুলোর থেকে টেক্সট এবং মেটাডেটা এক্সট্র্যাক্ট করতে হতে পারে। Apache Tika আপনাকে সহজে batch processing করতে সাহায্য করে, যেখানে একযোগে একাধিক ফাইল বা ডিরেক্টরি থেকে কনটেন্ট এক্সট্র্যাক্ট করা যায়।

এটি বিশেষভাবে কার্যকরী, যখন:

  • একাধিক ফাইল বা বৃহৎ ফাইলসেট থেকে কনটেন্ট এক্সট্র্যাক্ট করার প্রয়োজন হয়।
  • ডকুমেন্ট ম্যানেজমেন্ট এবং ডেটা আর্কাইভিং এর জন্য একাধিক ফাইলের কনটেন্ট প্রসেস করতে হয়।
  • ফাইল ফরম্যাট কনভার্সন বা টেক্সট বিশ্লেষণ করতে একাধিক ফাইল থেকে টেক্সট এক্সট্র্যাক্ট করতে হয়।

2. Multiple Files থেকে Content Extraction করার উদাহরণ

এখানে একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে Apache Tika ব্যবহার করে একাধিক ফাইল থেকে কনটেন্ট এক্সট্র্যাক্ট করা হয়েছে।

2.1 একাধিক ফাইল থেকে কনটেন্ট এক্সট্র্যাক্ট করা

import org.apache.tika.Tika;

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

public class MultipleFilesExtraction {
    public static void main(String[] args) {
        // Tika instance তৈরি
        Tika tika = new Tika();

        // ডিরেক্টরি থেকে ফাইলগুলির উপর একে একে কাজ করা
        File dir = new File("path/to/directory");  // আপনার ডিরেক্টরির পাথ দিন
        File[] files = dir.listFiles();

        // যদি ডিরেক্টরি ফাইলের মধ্যে থাকে
        if (files != null) {
            for (File file : files) {
                try {
                    // প্রতিটি ফাইল থেকে টেক্সট এক্সট্র্যাক্ট করা
                    if (file.isFile()) {
                        System.out.println("Processing file: " + file.getName());
                        String text = tika.parseToString(file);  // ফাইল থেকে টেক্সট এক্সট্র্যাক্ট করা
                        System.out.println("Extracted Content: " + text.substring(0, Math.min(100, text.length())));  // প্রথম 100 অক্ষর দেখানো
                        System.out.println("-----");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } else {
            System.out.println("No files found in the directory.");
        }
    }
}

2.2 কোডের ব্যাখ্যা

  • Tika ক্লাস ব্যবহার করে ডিরেক্টরির প্রতিটি ফাইল থেকে টেক্সট এক্সট্র্যাক্ট করা হচ্ছে।
  • listFiles() মেথড ব্যবহার করে ডিরেক্টরির সকল ফাইলের তালিকা সংগ্রহ করা হচ্ছে।
  • প্রতিটি ফাইলের কনটেন্ট parseToString() মেথড ব্যবহার করে টেক্সট আকারে এক্সট্র্যাক্ট করা হচ্ছে।
  • ফাইল থেকে এক্সট্র্যাক্ট করা কনটেন্টের প্রথম ১০০ অক্ষর আউটপুট হিসেবে দেখানো হচ্ছে, যাতে একাধিক ফাইলের কনটেন্ট দেখে নেওয়া যায়।

3. Multiple File Formats থেকে Content Extraction

Apache Tika প্রায় সকল জনপ্রিয় ফাইল ফরম্যাট সমর্থন করে, যেমন PDF, Word, Excel, PowerPoint, HTML, Image, Audio, Video ইত্যাদি। আপনি যদি একাধিক ফাইল ফরম্যাটের কনটেন্ট এক্সট্র্যাক্ট করতে চান, তবে Tika স্বয়ংক্রিয়ভাবে সঠিক ফরম্যাট শনাক্ত করে এবং তার থেকে কনটেন্ট বের করে।

এটি ব্যবহারের সুবিধা:

  • Tika MIME type detection স্বয়ংক্রিয়ভাবে করে থাকে, তাই আপনাকে আলাদা আলাদা ফাইল ফরম্যাটের জন্য কোড লেখা বা কনফিগারেশন করতে হয় না।
  • আপনি একে একে একাধিক ফাইলের কনটেন্ট এক্সট্র্যাক্ট করতে পারেন, যা প্রক্রিয়াকে আরও দ্রুত এবং সহজ করে তোলে।

উদাহরণ:

// PDF, DOCX, HTML, Excel, ইত্যাদি ফাইল একসাথে প্রসেস করা
File dir = new File("path/to/directory");  // আপনার ডিরেক্টরির পাথ
File[] files = dir.listFiles();

for (File file : files) {
    try {
        if (file.isFile()) {
            String text = tika.parseToString(file);  // ফাইল থেকে টেক্সট এক্সট্র্যাক্ট করা
            System.out.println("Extracted Content from " + file.getName() + ": " + text);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

4. Batch Processing and Performance Considerations

যখন আপনি একাধিক ফাইল প্রক্রিয়া করেন, তখন পারফরম্যান্স একটি গুরুত্বপূর্ণ বিষয় হয়ে দাঁড়ায়। Apache Tika বেশ বড় ডেটাসেট এবং বিভিন্ন ফাইল ফরম্যাটের সাথে কাজ করতে পারে, তবে এই কাজটি করতে কিছু পারফরম্যান্স অপটিমাইজেশন প্রয়োজন হতে পারে।

4.1 Paralleling Processing (প্যারালাল প্রসেসিং)

একাধিক ফাইল প্রসেস করতে parallel processing ব্যবহার করতে পারেন, যাতে পুরো প্রক্রিয়াটি দ্রুত হয়। Java's ExecutorService বা parallel streams ব্যবহার করে এটি করা যেতে পারে।

import java.util.concurrent.*;

ExecutorService executor = Executors.newFixedThreadPool(4);

for (File file : files) {
    executor.submit(() -> {
        try {
            String content = tika.parseToString(file);
            System.out.println("Processed " + file.getName() + ": " + content.substring(0, Math.min(100, content.length())));
        } catch (IOException e) {
            e.printStackTrace();
        }
    });
}

executor.shutdown();

এখানে, ExecutorService ব্যবহার করে একাধিক ফাইল প্রসেস করা হচ্ছে একাধিক থ্রেডে, যার ফলে প্রক্রিয়াটি দ্রুত এবং কার্যকরী হয়।


5. Tika CLI (Command Line Interface) ব্যবহার করে Multiple Files প্রসেস করা

Apache Tika এর একটি CLI টুলও রয়েছে যা কমান্ড লাইন থেকে একাধিক ফাইল প্রসেস করতে ব্যবহার করা যেতে পারে।

উদাহরণ:

tika-app.jar --text /path/to/directory/*.pdf

এটি আপনার নির্দিষ্ট ডিরেক্টরির সব PDF ফাইল থেকে টেক্সট এক্সট্র্যাক্ট করবে এবং তা আউটপুট হিসেবে দেখাবে।


সারাংশ

Apache Tika একটি অত্যন্ত কার্যকরী টুল যা একাধিক ফাইল থেকে কনটেন্ট এক্সট্র্যাক্ট করার জন্য ব্যবহৃত হয়। Tika দিয়ে আপনি ডিরেক্টরি বা ফাইল সেট থেকে টেক্সট এবং মেটাডেটা একসাথে এক্সট্র্যাক্ট করতে পারেন। এটি বিভিন্ন ফাইল ফরম্যাট সমর্থন করে এবং ফাইল ফরম্যাট সনাক্ত করার জন্য একটি সাধারণ API প্রদান করে। একাধিক ফাইল প্রসেস করতে parallel processing এবং batch processing ব্যবহার করে আপনি কার্যকরী এবং দ্রুত ফলাফল পেতে পারেন।


Content added By
Promotion

Are you sure to start over?

Loading...