TokenStream এবং Tokenizer কনফিগারেশন

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

254

Lucene হল একটি ওপেন সোর্স লুকআপ এবং সনাক্তকরণ লাইব্রেরি যা টেক্সট ডেটা ইনডেক্স এবং সার্চ করার জন্য ব্যবহৃত হয়। TokenStream এবং Tokenizer লুসিনের দুটি গুরুত্বপূর্ণ উপাদান যা ডেটা ইনডেক্সিং এবং সার্চিং প্রক্রিয়ার সময় টোকেন তৈরি এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়।

এই টিউটোরিয়ালে আমরা TokenStream এবং Tokenizer এর কাজ এবং কনফিগারেশন সম্পর্কিত ধারণা দেখব।


১. TokenStream এর ধারণা

TokenStream হল লুসিনের একটি কম্পোনেন্ট যা ইনডেক্সিং এবং সার্চিং এর জন্য টোকেন উৎপন্ন করে। এটি মূলত শব্দের একটি ধারাবাহিকতা, যেগুলি টেক্সট থেকে বের করা হয় এবং পরে ইনডেক্সিং বা সার্চিং প্রক্রিয়ায় ব্যবহৃত হয়।

TokenStream দুটি মৌলিক কাজ করে:

  1. Tokenization: টেক্সট থেকে শব্দ (tokens) আলাদা করা।
  2. Filtering: টোকেনের উপর বিভিন্ন প্রক্রিয়া বা ফিল্টার প্রয়োগ করা, যেমন স্টপওয়ার্ড (stopwords) অপসারণ, লোয়ারকেস করা ইত্যাদি।

উদাহরণস্বরূপ, যখন আপনি একটি টেক্সট ইনডেক্স করেন, TokenStream সেই টেক্সটকে ছোট ছোট ইউনিটে (টোকেন) ভেঙে দেয়, এবং প্রতিটি টোকেনকে প্রক্রিয়া করার জন্য বিভিন্ন ফিল্টার প্রয়োগ করা হতে পারে।


২. Tokenizer এর ধারণা

Tokenizer হল একটি কম্পোনেন্ট যা TokenStream তৈরি করে। এটি মূলত একটি টেক্সটকে বিভিন্ন টোকেন (যেমন শব্দ, সিলেবল, স্পেস, বা অন্যান্য আলাদা অংশ) এ বিভক্ত করে।

টোকেনাইজার বিভিন্ন ধরনের হতে পারে যেমন:

  • StandardTokenizer: এটি সাধারণত ভাষাগত নীতির ভিত্তিতে টেক্সটকে টোকেন করে।
  • WhitespaceTokenizer: এটি শুধুমাত্র স্পেস ব্যবহার করে টেক্সটকে টোকেনাইজ করে।
  • KeywordTokenizer: এটি পূর্ণ স্ট্রিংকে একটি একক টোকেনে পরিণত করে, যেমন একক শব্দ বা বাক্যাংশ।

৩. Tokenizer কনফিগারেশন

টোকেনাইজার কনফিগারেশন সাধারণত একটি Analyzer এর অংশ হিসেবে ব্যবহৃত হয়। আপনি একটি টোকেনাইজারকে ফিল্টারগুলির সাথে কনফিগার করে বিভিন্ন ধরনের টোকেন তৈরি করতে পারেন।

উদাহরণ: StandardTokenizer কনফিগারেশন

Analyzer analyzer = new StandardAnalyzer();

এখানে, StandardAnalyzer একটি StandardTokenizer ব্যবহার করে টেক্সটকে টোকেনাইজ করে এবং কিছু সাধারণ ফিল্টার প্রয়োগ করে (যেমন স্টপওয়ার্ড ফিল্টার)।

উদাহরণ: WhitespaceTokenizer কনফিগারেশন

Analyzer analyzer = new Analyzer() {
    @Override
    protected TokenStreamComponents createComponents(String fieldName) {
        Tokenizer tokenizer = new WhitespaceTokenizer();
        TokenStream tokenStream = new LowerCaseFilter(tokenizer);
        return new TokenStreamComponents(tokenizer, tokenStream);
    }
};

এখানে, WhitespaceTokenizer স্পেস ব্যবহার করে টেক্সটকে টোকেনাইজ করে এবং LowerCaseFilter ব্যবহার করে প্রতিটি টোকেনকে ছোট হাতের অক্ষরে রূপান্তরিত করে।


৪. TokenStream কনফিগারেশন

TokenStream কনফিগার করা হয় একটি Analyzer এর অংশ হিসেবে, যা টোকেনাইজার এবং ফিল্টারগুলির সাথে একত্রিত হয়।

উদাহরণ: TokenStream কনফিগারেশন

Analyzer analyzer = new Analyzer() {
    @Override
    protected TokenStreamComponents createComponents(String fieldName) {
        Tokenizer tokenizer = new WhitespaceTokenizer();
        TokenStream tokenStream = new StopFilter(tokenizer, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
        return new TokenStreamComponents(tokenizer, tokenStream);
    }
};

এখানে, StopFilter ব্যবহার করা হয়েছে যা স্টপওয়ার্ড (যেমন "the", "is", "at" ইত্যাদি) ফিল্টার করে, যাতে তারা ইনডেক্সিং প্রক্রিয়ায় অন্তর্ভুক্ত না হয়।


৫. Tokenizer এবং TokenStream এর ব্যবহার

উদাহরণ: Indexing with TokenStream

String text = "Lucene is a powerful search library";
Analyzer analyzer = new StandardAnalyzer();
try (Directory directory = FSDirectory.open(Paths.get("index"))) {
    IndexWriterConfig config = new IndexWriterConfig(analyzer);
    try (IndexWriter writer = new IndexWriter(directory, config)) {
        Document doc = new Document();
        doc.add(new TextField("content", text, Field.Store.YES));
        writer.addDocument(doc);
    }
}

এখানে, StandardAnalyzer ব্যবহার করা হয়েছে এবং TokenStream এর মাধ্যমে টেক্সটটিকে টোকেনাইজ করা হয়েছে, যা ইনডেক্সিং প্রক্রিয়ায় ব্যবহৃত হয়।

উদাহরণ: Searching with TokenStream

String queryStr = "Lucene search";
QueryParser parser = new QueryParser("content", analyzer);
Query query = parser.parse(queryStr);
try (Directory directory = FSDirectory.open(Paths.get("index"));
     DirectoryReader reader = DirectoryReader.open(directory)) {
    IndexSearcher searcher = new IndexSearcher(reader);
    TopDocs results = searcher.search(query, 10);
    for (ScoreDoc scoreDoc : results.scoreDocs) {
        Document doc = searcher.doc(scoreDoc.doc);
        System.out.println(doc.get("content"));
    }
}

এখানে, QueryParser এর মাধ্যমে TokenStream কনফিগার করা হয়েছে, যা সার্চের জন্য টোকেন তৈরি করে।


৬. TokenStream এবং Tokenizer এর সুবিধা

  • Tokenization: টেক্সট ডেটাকে ছোট ছোট টোকেন এ বিভক্ত করে, যাতে সহজে প্রসেসিং এবং সার্চ করা যায়।
  • Filtering: ফিল্টার ব্যবহারের মাধ্যমে অপ্রয়োজনীয় টোকেন যেমন স্টপওয়ার্ড বা কমন শব্দ সরিয়ে ফেলা হয়।
  • Customization: ব্যবহারকারীরা টোকেনাইজার এবং ফিল্টার কাস্টমাইজ করতে পারেন, যেমন ভাষাগত ফিল্টার বা কাস্টম শব্দ তালিকা।
  • Text Normalization: টোকেনাইজিংয়ের মাধ্যমে ডেটার ছোট হাতের অক্ষরে রূপান্তর, স্টপওয়ার্ড ফিল্টারিং, এবং অন্যান্য নরমালাইজেশন করা যায়।

সারাংশ

TokenStream এবং Tokenizer হল লুসিনের গুরুত্বপূর্ণ কম্পোনেন্ট যা টেক্সট ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। Tokenizer টেক্সটকে টোকেন বা শব্দে বিভক্ত করে, এবং TokenStream সেই টোকেনগুলির উপর ফিল্টার এবং প্রসেসিং অপারেশন চালায়। লুসিনে ইনডেক্সিং এবং সার্চিং প্রক্রিয়ায় এই দুটি কম্পোনেন্ট অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে এবং ডেটার দ্রুত প্রক্রিয়াকরণ এবং কার্যকরী সার্চের জন্য অপরিহার্য।


Content added By
Promotion

Are you sure to start over?

Loading...