Lucene একটি শক্তিশালী ওপেন সোর্স ফুল-টেক্সট সূচক (index) এবং অনুসন্ধান (search) লাইব্রেরি যা Java প্রোগ্রামিং ভাষায় তৈরি করা হয়েছে। এটি ডেটাবেস বা অন্য কোনো তথ্যের মধ্যে ফাস্ট এবং দক্ষ অনুসন্ধান করতে ব্যবহৃত হয়। Analyzers হল এমন উপাদান যা Lucene সূচক তৈরি এবং অনুসন্ধান প্রক্রিয়ায় ব্যবহৃত টেক্সট ডেটার প্রিপ্রসেসিং (প্রসেসিং) সম্পাদন করে। বিভিন্ন ধরনের Analyzer ব্যবহার করে আপনি আপনার সূচক এবং অনুসন্ধান পদ্ধতিকে কাস্টমাইজ করতে পারেন।
এখানে আমরা Lucene এর StandardAnalyzer, WhitespaceAnalyzer, এবং Custom Analyzer এর ব্যবহার এবং তাদের পার্থক্য নিয়ে আলোচনা করব।
১. StandardAnalyzer
StandardAnalyzer Lucene-এ সবচেয়ে সাধারণ এবং ব্যবহৃত অ্যানালাইজার। এটি সাধারণ টেক্সট প্রক্রিয়াজাতকরণের জন্য তৈরি করা হয়েছে এবং শব্দ বিভাজন (tokenization), স্টপওয়ার্ড রিমুভাল, এবং শব্দগুলির স্নোফ্লেকিং (stemming) পরিচালনা করে।
StandardAnalyzer কাজের পদ্ধতি:
- Tokenization: এটি টেক্সট ডেটাকে ছোট ছোট টোকেন বা শব্দে বিভক্ত করে।
- Stop-words removal: এটি এমন কিছু সাধারণ শব্দ, যেমন "the", "is", "in", ইত্যাদি, যা সাধারণত অনুসন্ধানে অতিরিক্ত কিছু যোগ করে না, তা সরিয়ে দেয়।
- Lowercasing: সমস্ত শব্দকে ছোট হাতের অক্ষরে রূপান্তরিত করা হয়।
- Stemming: এটি শব্দের মূল রূপে রূপান্তরিত করে, যেমন "running" কে "run"-এ রূপান্তরিত করা হয়।
StandardAnalyzer ব্যবহার উদাহরণ:
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.RAMDirectory;
public class StandardAnalyzerExample {
public static void main(String[] args) throws Exception {
Analyzer analyzer = new StandardAnalyzer();
RAMDirectory index = new RAMDirectory();
IndexWriter writer = new IndexWriter(index, new IndexWriterConfig(analyzer));
Document doc = new Document();
doc.add(new TextField("content", "Lucene is an amazing library for searching", Field.Store.YES));
writer.addDocument(doc);
writer.close();
}
}
এখানে, StandardAnalyzer ব্যবহৃত হয়েছে এবং এটি ডকুমেন্টের মধ্যে টেক্সট ইনডেক্স করবে।
২. WhitespaceAnalyzer
WhitespaceAnalyzer একটি সহজ এবং মৌলিক অ্যানালাইজার যা কেবলমাত্র সাদা স্থান (whitespace) এর মাধ্যমে শব্দ বিভাজন করে। এর মানে হল যে, এটি কোনো স্টপওয়ার্ড সরানো বা স্নোফ্লেকিং করার মতো অন্যান্য প্রক্রিয়া সম্পাদন করে না। এটি সাধারণত তখন ব্যবহার করা হয় যখন আপনি শুধুমাত্র শব্দ বিভাজন করতে চান এবং কোনো অতিরিক্ত প্রক্রিয়া প্রয়োগ করতে চান না।
WhitespaceAnalyzer কাজের পদ্ধতি:
- Tokenization: শুধুমাত্র সাদা স্থান বা স্পেস দ্বারা শব্দ বিভাজন করা হয়, কোনও স্টপওয়ার্ড বা স্নোফ্লেকিং প্রক্রিয়া চালানো হয় না।
WhitespaceAnalyzer ব্যবহার উদাহরণ:
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.whitespace.WhitespaceAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.RAMDirectory;
public class WhitespaceAnalyzerExample {
public static void main(String[] args) throws Exception {
Analyzer analyzer = new WhitespaceAnalyzer();
RAMDirectory index = new RAMDirectory();
IndexWriter writer = new IndexWriter(index, new IndexWriterConfig(analyzer));
Document doc = new Document();
doc.add(new TextField("content", "Lucene is great", Field.Store.YES));
writer.addDocument(doc);
writer.close();
}
}
এখানে, WhitespaceAnalyzer ব্যবহার করা হয়েছে যেখানে শুধুমাত্র সাদা স্থান দিয়ে শব্দ বিভাজন করা হয়েছে, অন্য কোনো প্রক্রিয়া করা হয়নি।
৩. Custom Analyzer
কিছু ক্ষেত্রে, আপনার টেক্সট প্রক্রিয়াজাতকরণের জন্য একটি কাস্টম অ্যানালাইজারের প্রয়োজন হতে পারে, যেখানে আপনি Tokenization, Stop-words removal, এবং Stemming এর মত কিছু কাস্টম প্রক্রিয়া প্রয়োগ করতে পারেন। Custom Analyzer তৈরি করতে, আপনি Lucene-এর বিভিন্ন অ্যানালাইজার এবং টোকেনフィল্ট ব্যবহার করতে পারেন।
Custom Analyzer কাজের পদ্ধতি:
- Custom Tokenization: কাস্টম টোকেনাইজেশন প্যাটার্ন ব্যবহার করে টোকেন গুলি বিভাজন করা।
- Stop-words removal: আপনার প্রয়োজন অনুযায়ী স্টপ-ওয়ার্ড তালিকা তৈরি করা।
- Stemming or Lemmatization: কাস্টম শব্দের স্নোফ্লেকিং বা লেম্যাটাইজেশন।
Custom Analyzer উদাহরণ:
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.core.WhitespaceTokenizer;
import org.apache.lucene.analysis.StopwordAnalyzerBase;
import org.apache.lucene.analysis.util.CharArraySet;
import org.apache.lucene.analysis.TokenStream;
import java.io.IOException;
public class CustomAnalyzer extends Analyzer {
private CharArraySet stopWords;
public CustomAnalyzer() {
// Custom stopwords
stopWords = new CharArraySet(3, true);
stopWords.add("the");
stopWords.add("is");
stopWords.add("an");
}
@Override
protected TokenStreamComponents createComponents(String fieldName) {
WhitespaceTokenizer source = new WhitespaceTokenizer();
TokenStream filter = new StopFilter(source, stopWords); // Stopword filter
return new TokenStreamComponents(source, filter);
}
public static void main(String[] args) throws IOException {
CustomAnalyzer analyzer = new CustomAnalyzer();
TokenStream tokenStream = analyzer.tokenStream("content", "Lucene is an amazing search library");
tokenStream.reset();
while (tokenStream.incrementToken()) {
CharTermAttribute term = tokenStream.getAttribute(CharTermAttribute.class);
System.out.println(term.toString());
}
}
}
এখানে, CustomAnalyzer তৈরি করা হয়েছে যেখানে আমরা কাস্টম স্টপওয়ার্ড এবং সাদা স্থান দ্বারা টোকেন বিভাজন ব্যবহার করেছি।
৪. StandardAnalyzer, WhitespaceAnalyzer, এবং Custom Analyzer এর পার্থক্য
| Feature | StandardAnalyzer | WhitespaceAnalyzer | Custom Analyzer |
|---|---|---|---|
| Tokenization | Spacing, punctuation, and special characters used | Only spaces used to split tokens | Custom logic based on user needs |
| Stop Words Removal | Yes, uses predefined stop-words list | No | Can be customized to remove user-defined words |
| Stemming | Yes, uses built-in stemming logic | No | Can be customized for stemming or lemmatization |
| Use Case | General purpose analysis | Simple tokenization for space-separated text | Highly flexible and customizable for specific needs |
সারাংশ
Lucene এ Analyzers গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি টেক্সট প্রক্রিয়াজাতকরণ করে, যেমন শব্দ বিভাজন, স্টপওয়ার্ড সরানো, স্নোফ্লেকিং ইত্যাদি, যা অনুসন্ধান এবং সূচক প্রক্রিয়াকে আরও কার্যকরী এবং দ্রুত করে তোলে। StandardAnalyzer একটি সাধারণ, বহুল ব্যবহৃত অ্যানালাইজার, WhitespaceAnalyzer খুব সহজ এবং সাদামাটা, এবং Custom Analyzer আপনাকে কাস্টম টোকেনাইজেশন এবং অন্যান্য প্রক্রিয়া তৈরি করতে সহায়তা করে। আপনার প্রোজেক্টের প্রয়োজন অনুযায়ী সঠিক অ্যানালাইজার নির্বাচন করা গুরুত্বপূর্ণ।
Read more