Apache Lucene একটি শক্তিশালী ইন্ডেক্সিং এবং সার্চ টুল যা ডেটাবেস বা ফাইল সিস্টেমে তথ্য অনুসন্ধান (search) করতে ব্যবহৃত হয়। Lucene সার্চ ইঞ্জিন তৈরি করতে ব্যবহৃত হয় এবং এটি সাধারণত ইনডেক্সিং, টোকেনাইজেশন, এবং কুয়েরি প্রসেসিংয়ের জন্য বিভিন্ন Analyzer ব্যবহার করে।
Lucene এ Analyzer একটি গুরুত্বপূর্ণ উপাদান, যা ইনডেক্সিং এবং সার্চ প্রক্রিয়াকে কাস্টমাইজ করতে সাহায্য করে। আপনি যদি আপনার নির্দিষ্ট প্রয়োজনে বিশেষভাবে কাস্টম টোকেনাইজেশন বা প্রিপ্রসেসিং করতে চান, তবে Custom Analyzer তৈরি করা প্রয়োজন।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে Analyzer ক্লাসটি এক্সটেন্ড করে একটি Custom Analyzer তৈরি করা যায়।
১. Lucene Analyzer Overview
Lucene এ Analyzer একটি ক্লাস যা মূলত TokenStream তৈরি করতে ব্যবহৃত হয়। TokenStream হল এমন একটি স্ট্রীম যা ইনডেক্সিং বা সার্চিংয়ের জন্য প্রক্রিয়াজাত টোকেন সরবরাহ করে। এটি সাধারণত Tokenizer এবং TokenFilter এর সমন্বয়ে তৈরি হয়।
- Tokenizer: এটি ইনপুট টেক্সটকে টোকেন (শব্দ বা অন্যান্য ইউনিট) এ বিভক্ত করে।
- TokenFilter: এটি টোকেনগুলির উপর প্রক্রিয়া চালায় যেমন স্টপওয়ার্ড রিমুভাল, লিমিটাইজেশন বা স্টেমিং।
২. Custom Analyzer তৈরি করা
Lucene এর মধ্যে কাস্টম Analyzer তৈরি করতে হলে, Analyzer ক্লাসটি এক্সটেন্ড করতে হবে এবং সেই সাথে প্রয়োজনীয় টোকেনাইজার এবং ফিল্টার কনফিগার করতে হবে। এর মাধ্যমে আপনি নিজের বিশেষ লজিক প্রয়োগ করতে পারেন, যেমন স্টপওয়ার্ড রিমুভাল, শব্দটিকে ছোট হাতের অক্ষরে রূপান্তর করা ইত্যাদি।
উদাহরণ: Custom Analyzer
ধরা যাক, আপনি একটি কাস্টম Analyzer তৈরি করতে চান যা ইনডেক্সিংয়ের সময় স্টপওয়ার্ড রিমুভ এবং টোকেনকে ছোট হাতের অক্ষরে রূপান্তর করবে।
Step 1: Custom Analyzer তৈরি করা
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardTokenizer;
import org.apache.lucene.analysis.core.LowerCaseFilter;
import org.apache.lucene.analysis.en.EnglishStopWords;
public class CustomAnalyzer extends Analyzer {
@Override
protected TokenStreamComponents createComponents(String fieldName) {
// Standard tokenizer
StandardTokenizer tokenizer = new StandardTokenizer();
// Lowercase filter
TokenStream tokenStream = new LowerCaseFilter(tokenizer);
// Remove stop words
tokenStream = new EnglishStopWords(tokenStream);
return new TokenStreamComponents(tokenizer, tokenStream);
}
}
এখানে:
- StandardTokenizer: এটি ইনপুট স্ট্রিংকে শব্দে বিভক্ত করবে।
- LowerCaseFilter: এটি সমস্ত টোকেনকে ছোট হাতের অক্ষরে রূপান্তর করবে।
- EnglishStopWords: এটি ইংরেজি স্টপওয়ার্ড রিমুভ করার জন্য ব্যবহার করা হচ্ছে।
Step 2: Custom Analyzer ব্যবহার করা
এখন, আপনি এই কাস্টম Analyzer ব্যবহার করে টোকেনাইজেশন এবং ইনডেক্সিং করতে পারবেন।
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;
import org.apache.lucene.index.IndexWriterConfig;
public class CustomAnalyzerExample {
public static void main(String[] args) throws Exception {
// Create a RAM directory to store the index
RAMDirectory directory = new RAMDirectory();
// Create a Custom Analyzer
Analyzer analyzer = new CustomAnalyzer();
// Create IndexWriter configuration
IndexWriterConfig config = new IndexWriterConfig(analyzer);
// Create an IndexWriter
IndexWriter writer = new IndexWriter(directory, config);
// Create a document to index
Document doc = new Document();
doc.add(new Field("content", "The quick brown fox jumps over the lazy dog", Field.Store.YES, Field.Index.ANALYZED));
// Add the document to the index
writer.addDocument(doc);
// Commit the changes and close the writer
writer.commit();
writer.close();
System.out.println("Indexing completed.");
}
}
এখানে, RAMDirectory ব্যবহার করা হয়েছে যাতে ইনডেক্সিংয়ের ডেটা RAM এ সংরক্ষিত থাকে। এরপর IndexWriter দিয়ে ডকুমেন্ট ইনডেক্স করা হচ্ছে এবং কাস্টম Analyzer দিয়ে টোকেনাইজেশন এবং প্রক্রিয়াজাত করা হচ্ছে।
৩. Custom Tokenizer এবং TokenFilter ব্যবহার করা
আপনি Tokenizer এবং TokenFilter ক্লাসগুলোকে কাস্টমাইজ করেও Custom Analyzer তৈরি করতে পারেন।
উদাহরণ: Custom Tokenizer
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();
// Custom tokenization logic goes here
String input = "The quick brown fox";
termAtt.append(input);
return true;
}
}
এখানে, CustomTokenizer ক্লাসটি একটি কাস্টম টোকেনাইজার তৈরি করছে যা ইনপুট টেক্সটকে টোকেনাইজ করবে। আপনি এটিকে Analyzer এর মধ্যে ব্যবহার করতে পারেন।
৪. Custom Analyzer এর সুবিধা
- Fine-grained Control: কাস্টম অ্যানালাইজার ব্যবহার করে আপনি টোকেনাইজেশন, স্টপওয়ার্ড রিমুভাল, লিমিটাইজেশন, স্টেমিং ইত্যাদি কাস্টমাইজ করতে পারেন।
- Flexibility: কোনো নির্দিষ্ট টেক্সট প্রক্রিয়া প্রয়োগ করার জন্য এটি অত্যন্ত সুবিধাজনক।
- Performance: কাস্টম অ্যানালাইজার ব্যবহার করে আপনি ইন্ডেক্সিং বা সার্চ পারফরম্যান্স উন্নত করতে পারেন, যেমন স্টপওয়ার্ড ফিল্টার, টোকেন ফিল্টার ইত্যাদি।
সারাংশ
Lucene এ Custom Analyzer তৈরি করা খুবই সহজ এবং এটি টোকেনাইজেশন, ফিল্টারিং এবং অন্যান্য ডেটা প্রক্রিয়ায় অধিক নিয়ন্ত্রণ প্রদান করে। কাস্টম অ্যানালাইজার ব্যবহার করে আপনি আপনার ইনডেক্সিং এবং সার্চ প্রক্রিয়াকে আরও দক্ষ এবং কাস্টমাইজড করতে পারেন। Tokenizer এবং TokenFilter ক্লাসগুলোকে কাস্টমাইজ করার মাধ্যমে আপনি আরো সুনির্দিষ্টভাবে ডেটা প্রক্রিয়া করতে পারবেন।
Read more