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

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

213

Apache Lucene হল একটি ওপেন সোর্স লাইব্রেরি যা ব্যবহারকারীদের জন্য টেক্সট অনুসন্ধান (text search) এবং ইনডেক্সিং (indexing) করার সুবিধা প্রদান করে। এটি খুব দ্রুত এবং স্কেলেবল, যা বড় পরিসরের ডেটাবেসে কার্যকরীভাবে ব্যবহার করা যায়। লুসিন সাধারণত analyzers এবং tokenizers ব্যবহার করে ডেটা ইনডেক্স এবং সার্চ করে থাকে। তবে, আপনি যদি কোনও নির্দিষ্ট ডেটার উপর আরও কাস্টমাইজেশন চান, তাহলে আপনাকে custom analyzer এবং custom tokenizer তৈরি করতে হবে।

এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Custom Analyzer এবং Tokenizer তৈরি করা যায়।


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

  • Analyzer: একটি Analyzer হল একটি ক্লাস যা টেক্সটকে ইনডেক্স করার জন্য প্রস্তুত করে। এটি টেক্সটকে ছোট টুকরোয় ভাগ করে (tokenize), প্রয়োজনীয় স্টপওয়ার্ড সরিয়ে ফেলে এবং শব্দের বেস ফর্মে রূপান্তর করে (stemming)। এটি ইনডেক্সিংয়ের জন্য গুরুত্বপূর্ণ অংশ।
  • Tokenizer: Tokenizer হল একটি উপাদান যা টেক্সটকে ছোট ছোট টুকরো বা "tokens" (যেমন শব্দ বা ফ্রেজ) এ ভেঙে ফেলে। Tokenizer শব্দগুলির মধ্যে সীমানা নির্ধারণ করে এবং পরে এগুলিকে আরও প্রসেসিংয়ের জন্য Analyzer-এ পাঠায়।

২. Custom Analyzer এবং Tokenizer তৈরি করার প্রয়োজনীয়তা

মাঝে মাঝে আপনি স্ট্যান্ডার্ড লুসিন analyzer বা tokenizer দিয়ে কাজ করতে পারেন না যদি আপনার ডেটা নির্দিষ্ট কাস্টমাইজেশন দাবি করে। এর জন্য custom analyzer এবং tokenizer তৈরি করা হয়। যেমন:

  • Custom Tokenizer: যদি আপনার ডেটাতে বিশেষ ধরনের স্পেসিফিকেশন থাকে (যেমন কমা বা সেমিকোলন দিয়ে পৃথক করা টোকেন), তাহলে আপনি একটি কাস্টম tokenizer তৈরি করতে পারেন।
  • Custom Analyzer: এটি তখন ব্যবহৃত হয় যখন আপনাকে ইনডেক্সিং করার সময় টেক্সট প্রক্রিয়াকরণের জন্য কাস্টম লজিক প্রয়োজন হয়, যেমন শব্দের সঠিকভাবে লেমাটাইজেশন বা ফিল্টারিং ইত্যাদি।

৩. Custom Tokenizer উদাহরণ

লুসিনের WhitespaceTokenizer সাধারণত স্পেস দিয়ে শব্দগুলো ভাগ করে। তবে, যদি আপনার টেক্সটে পিরিয়ড বা কমা দ্বারা পৃথক করা শব্দ থাকে, তবে আপনি একটি কাস্টম tokenizer তৈরি করতে পারেন।

Custom Tokenizer Class:

import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import java.io.IOException;

public class CustomTokenizer extends Tokenizer {
    private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);

    @Override
    public boolean incrementToken() throws IOException {
        clearAttributes();
        
        int c;
        while ((c = input.read()) != -1) {
            // Logic to split based on commas
            if (c == ',' || c == '.') {
                return true;
            }
            termAtt.append((char) c);
        }
        return false;
    }
}

এখানে, CustomTokenizer ক্লাসটি একটি কাস্টম লজিক ব্যবহার করে টোকেন তৈরি করবে, যেখানে এটি কমা বা পিরিয়ড দেখে টোকেনের সীমা নির্ধারণ করবে।


৪. Custom Analyzer উদাহরণ

আপনার যদি এমন পরিস্থিতি থাকে যেখানে আপনি টোকেনাইজ করার পর কিছু নির্দিষ্ট ফিল্টার বা স্টপওয়ার্ড ফিল্টার ব্যবহার করতে চান, তাহলে Custom Analyzer তৈরি করা প্রয়োজন।

Custom Analyzer Class:

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.core.LowerCaseFilter;
import org.apache.lucene.analysis.standard.StandardTokenizer;
import org.apache.lucene.analysis.CharTokenizer;

import java.io.IOException;
import java.io.Reader;

public class CustomAnalyzer extends Analyzer {

    @Override
    protected TokenStreamComponents createComponents(String fieldName) {
        Tokenizer source = new StandardTokenizer();
        TokenStream filter = new LowerCaseFilter(source);  // Convert to lowercase
        return new TokenStreamComponents(source, filter);
    }
}

এখানে CustomAnalyzer ক্লাসটি একটি কাস্টম লজিক ব্যবহার করে ইনডেক্সিং করবে। StandardTokenizer প্রথমে টেক্সটটিকে টোকেনে ভাগ করবে এবং LowerCaseFilter টোকেনগুলোকে ছোট হাতের অক্ষরে পরিণত করবে। আপনি বিভিন্ন ধরনের ফিল্টার ব্যবহার করতে পারেন, যেমন StopwordFilter, SynonymFilter, অথবা কাস্টম ফিল্টার।


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

Custom Analyzer এবং Tokenizer তৈরি করার পর, এগুলি লুসিনের ইনডেক্সিং এবং সার্চ প্রক্রিয়ায় ব্যবহার করতে হবে।

Indexing with Custom Analyzer and Tokenizer:

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

public class CustomAnalyzerExample {

    public static void main(String[] args) throws Exception {
        RAMDirectory ramDirectory = new RAMDirectory();
        Analyzer analyzer = new CustomAnalyzer();
        IndexWriter writer = new IndexWriter(ramDirectory, new IndexWriterConfig(analyzer));

        Document doc = new Document();
        doc.add(new Field("content", "This is a test, with a comma!", Field.Store.YES, Field.Index.ANALYZED));
        writer.addDocument(doc);
        writer.close();
    }
}

এখানে, CustomAnalyzer ব্যবহার করে একটি ডকুমেন্ট ইনডেক্স করা হয়েছে, যেখানে content ফিল্ডে একটি টেক্সট রয়েছে, যেটি কমা দিয়ে পৃথক করা শব্দ ব্যবহার করেছে।


৬. Searching with Custom Analyzer:

ইনডেক্স করার পর আপনি কাস্টম Analyzer ব্যবহার করে অনুসন্ধানও করতে পারেন।

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

public class CustomAnalyzerSearch {

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

        // Assume the index has been created previously
        DirectoryReader reader = DirectoryReader.open(ramDirectory);
        IndexSearcher searcher = new IndexSearcher(reader);

        // Use QueryParser with the custom analyzer
        QueryParser parser = new QueryParser("content", analyzer);
        Query query = parser.parse("comma");

        // Perform the search
        int docId = searcher.search(query, 1).scoreDocs[0].doc;
        System.out.println("Found document with ID: " + docId);
    }
}

এখানে, QueryParser ব্যবহার করে CustomAnalyzer এর মাধ্যমে অনুসন্ধান করা হয়েছে। এটি content ফিল্ডে comma শব্দ অনুসন্ধান করবে এবং সংশ্লিষ্ট ডকুমেন্ট ID রিটার্ন করবে।


সারাংশ

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

এগুলি ব্যবহার করে আপনি আপনার অনুসন্ধান প্রক্রিয়া আরও কার্যকরী এবং নির্দিষ্ট ডেটার জন্য সঠিকভাবে কাস্টমাইজড করতে পারবেন।


Content added By
Promotion

Are you sure to start over?

Loading...