Practical উদাহরণ: Custom Analyzer এবং Tokenizer তৈরি করা

Analyzer এবং Tokenizer - লুসিন (Lucene) - Java Technologies

242

Apache Lucene একটি শক্তিশালী ওপেন সোর্স লাইব্রেরি যা টেক্সট ইনডেক্সিং এবং স্চার্চিংয়ের জন্য ব্যবহৃত হয়। এটি ডকুমেন্ট ইনডেক্সিংয়ের মাধ্যমে দ্রুত সার্চের সক্ষমতা প্রদান করে। Custom Analyzer এবং Tokenizer তৈরি করে আপনি কাস্টমাইজড সেচার বা ইনডেক্সিং পদ্ধতি তৈরি করতে পারেন যা আপনার প্রোজেক্টের জন্য উপযুক্ত।

এই টিউটোরিয়ালে, আমরা দেখব কীভাবে Custom Analyzer এবং Tokenizer তৈরি করা যায় এবং Lucene এর মাধ্যমে টেক্সট প্রোসেসিং কাস্টমাইজ করা যায়।


১. Lucene Analyzer এবং Tokenizer এর ভূমিকা

Analyzer এবং Tokenizer Lucene এর টেক্সট প্রোসেসিং এর প্রধান উপাদান।

  • Analyzer: এটি একটি ক্লাস যা টেক্সট ডকুমেন্ট প্রক্রিয়া করার জন্য ব্যবহৃত হয়, এবং এটি ডকুমেন্টের টোকেন (বিশেষ শব্দ বা ক্যারেক্টারস) তৈরি করতে একটি Tokenizer এবং Filter এর সমন্বয়ে কাজ করে।
  • Tokenizer: এটি মূলত টেক্সট স্ট্রিংকে একাধিক টোকেনে বিভক্ত করে।

আপনি যখন Custom Analyzer এবং Tokenizer তৈরি করেন, তখন আপনি টেক্সটের প্রক্রিয়াকরণ নিয়ন্ত্রণ করতে পারেন, যেমন শব্দ বিভাজন, স্টপওয়ার্ডস (stopwords) ফিল্টার, লেমাটাইজেশন বা স্টেমিং (stemming) ইত্যাদি।


২. Custom Tokenizer তৈরি করা

Lucene-এ Custom Tokenizer তৈরি করতে হলে আপনাকে Tokenizer ক্লাসটি ব্যবহার করতে হবে, যা টেক্সট স্ট্রিংকে একাধিক টোকেনে বিভক্ত করে।

উদাহরণ: Custom Tokenizer তৈরি করা

import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.util.AttributeFactory;

import java.io.IOException;

public class CustomTokenizer extends Tokenizer {

    private final CharTermAttribute charTermAttr = addAttribute(CharTermAttribute.class);

    public CustomTokenizer(AttributeFactory factory) {
        super(factory);
    }

    @Override
    public boolean incrementToken() throws IOException {
        clearAttributes();
        String inputText = this.input.readLine();
        if (inputText == null) {
            return false;
        }

        // Custom logic to split the input text based on spaces
        String[] tokens = inputText.split(" ");
        for (String token : tokens) {
            charTermAttr.append(token);
        }

        return true;
    }
}

এখানে, CustomTokenizer ক্লাসটি একটি টেক্সট স্ট্রিংকে স্পেসের উপর ভিত্তি করে টোকেনে বিভক্ত করে।


৩. Custom Analyzer তৈরি করা

Custom Analyzer তৈরি করতে আপনাকে Analyzer ক্লাসটি ব্যবহার করতে হবে, যা আপনার কাস্টম Tokenizer এবং TokenFilter কনফিগার করে।

উদাহরণ: Custom Analyzer তৈরি করা

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;

import java.io.IOException;

public class CustomAnalyzer extends Analyzer {

    @Override
    protected TokenStreamComponents createComponents(String fieldName) {
        Tokenizer tokenizer = new CustomTokenizer();
        return new TokenStreamComponents(tokenizer);
    }
}

এখানে, CustomAnalyzer ক্লাসটি আমাদের CustomTokenizer কে ব্যবহার করে। আপনার কাস্টম টোকেনাইজারের মাধ্যমে সমস্ত ইনপুট টেক্সট প্রক্রিয়া করা হবে।


৪. Lucene Indexing এবং Searching Example

Lucene ব্যবহার করে কাস্টম Analyzer এবং Tokenizer দিয়ে ডকুমেন্ট ইনডেক্সিং এবং সার্চিং করা যেতে পারে।

উদাহরণ: Indexing করা

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.analysis.Analyzer;

import java.io.IOException;

public class LuceneIndexer {
    public static void main(String[] args) throws IOException {
        // Create a RAMDirectory to store the index in memory
        RAMDirectory index = new RAMDirectory();
        Analyzer analyzer = new CustomAnalyzer();
        IndexWriterConfig config = new IndexWriterConfig(analyzer);

        // Create IndexWriter
        IndexWriter writer = new IndexWriter(index, config);

        // Create a Document and add a field
        Document doc = new Document();
        doc.add(new TextField("content", "This is a custom text that will be indexed", Field.Store.YES));

        // Add document to index
        writer.addDocument(doc);
        writer.close();

        // Query the index to verify
        DirectoryReader reader = DirectoryReader.open(index);
        System.out.println("Index has " + reader.numDocs() + " document(s)");
        reader.close();
    }
}

এখানে, LuceneIndexer ক্লাসটি একটি ডকুমেন্ট ইনডেক্স করছে এবং ইনডেক্স করার জন্য CustomAnalyzer ব্যবহার করছে।


উদাহরণ: Searching করা

import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.analysis.Analyzer;

public class LuceneSearcher {
    public static void main(String[] args) throws Exception {
        RAMDirectory index = new RAMDirectory();
        Analyzer analyzer = new CustomAnalyzer();

        // Set up the IndexWriter
        IndexWriterConfig config = new IndexWriterConfig(analyzer);
        IndexWriter writer = new IndexWriter(index, config);
        
        // Create and index a document
        Document doc = new Document();
        doc.add(new TextField("content", "Custom Tokenizer Test", Field.Store.YES));
        writer.addDocument(doc);
        writer.close();

        // Set up QueryParser
        QueryParser parser = new QueryParser("content", analyzer);
        Query query = parser.parse("Custom");

        // Search the index
        DirectoryReader reader = DirectoryReader.open(index);
        IndexSearcher searcher = new IndexSearcher(reader);
        int hits = searcher.search(query, 10).totalHits;
        System.out.println("Total hits: " + hits);

        reader.close();
    }
}

এখানে, LuceneSearcher ক্লাসটি ইনডেক্স করা ডকুমেন্টে CustomAnalyzer ব্যবহার করে একটি কিওয়ারি সার্চ করছে এবং এর সাথে সংশ্লিষ্ট টোকেন খুঁজে পাচ্ছে।


৫. Custom Tokenizer এবং Analyzer এর ব্যবহার

Custom Tokenizer এবং Analyzer এর মাধ্যমে আপনি:

  1. টেক্সট থেকে কাস্টম টোকেন তৈরি করতে পারেন।
  2. টোকেন ফিল্টারিং বা প্রোসেসিং কাস্টমাইজ করতে পারেন।
  3. আপনার ইনডেক্সিং এবং সার্চিং প্রক্রিয়া আরও কার্যকরী এবং সঠিক করতে পারেন।

এটি বিশেষত দরকার হয় যখন আপনি বিশেষ ধরনের ডেটা (যেমন নম্বর, তারিখ, পণ্য কোড) বা স্টপওয়ার্ডস এবং স্পেশাল ক্যারেক্টার প্রক্রিয়া করতে চান।


সারাংশ

Lucene ব্যবহার করে Custom Tokenizer এবং Custom Analyzer তৈরি করা খুবই শক্তিশালী উপায় যার মাধ্যমে আপনি আপনার টেক্সট ডাটা প্রক্রিয়াকে কাস্টমাইজ করতে পারেন। এটি আপনাকে আপনার ইনডেক্সিং এবং সার্চিং প্রক্রিয়া আরও নির্ভুল এবং কার্যকরী করতে সহায়তা করবে। Lucene এর এই ক্ষমতা আপনাকে উন্নত এবং কাস্টম টেক্সট প্রোসেসিং সমাধান তৈরি করতে সহায়তা করে, যা আপনার সার্চ এবং ডেটা বিশ্লেষণ কার্যক্রমকে আরও উন্নত করে তোলে।


Content added By
Promotion

Are you sure to start over?

Loading...