আগের লেখায় যুক্তি দিয়েছিলাম যে ইংরেজী বা অন্যান্য ভাষার মতো বাংলাতে নিয়ম-ভিত্তিক স্পেলচেকার বানানো প্রায় অসম্ভব। একমাত্র গ্রহণযোগ্য বিকল্প হলো সম্ভাব্য সব শব্দের তালিকা তৈরি করে তার ভিত্তিতে স্পেল চেকার বানানো।
শব্দ তালিকা:
সম্ভাব্য সব শব্দের তালিকা বানানো খুব কঠিন একটা কাজ। অভিধানে সাধারণত শব্দের মূল ভুক্তি থাকে; সে শব্দ থেকে আর নতুন যেসব শব্দ হতে পারে তার বিস্তারিত কোন তালিকা থাকে না। তবে প্রায় সময়ই, প্রয়োগ দেখিয়ে একাধিক উদাহরণ থাকে। এসব প্রয়োগ থেকে একটি exhaustive তালিকা হয়ত বানানো সম্ভব। কিন্তু এটা অনেক পরিশ্রমের কাজ হবে। পরিশ্রমটা শব্দ টাইপ করতে না, সেগুলো ঠিকমতো টাইপ করা হয়েছে কি না তা যাচাই করতে। অভিধান থেকে নেয়া শব্দতালিকাতে শব্দগুলো আভিধানিক ক্রমে থাকবে। এ ক্রমে থাকার দরুণ তা যাচাই করা কঠিন। আমাদের মস্তিষ্ক বাংলা শব্দ এরকম তালিকা আকারে দেখে অভ্যস্ত নয়, তাই অল্প কিছু শব্দ দেখার পরই মাথা আউলিয়ে যায়। মাথা সুস্থির রেখে এ কাজ করতে গেলে সুদীর্ঘ সময়ের প্রয়োজন।
এর বিকল্প হিসেবে আমরা ভিন্ন উপায়ে শব্দতালিকা বানাতে পারি। সেটা হচ্ছে বানান ভুল নেই এমন প্রচুর লেখা থেকে শব্দ ছেঁকে নিয়ে। যেমন, প্রথম আলোর গত এক বৎসরের লেখাগুলো থেকে আমরা প্রোগ্রাম চালিয়ে ব্যবহৃত সব শব্দের একটা ভাল তালিকা পেতে পারি। এ ধরনের তালিকাতে মানুষ, স্থান ইত্যাদি নাম-বিশেষ্য থাকবে- সেটা আমাদের জন্য সুবিধা। আবার এ তালিকাতে ভুল শব্দ থাকতে পারে সেটাও যাচাই করতে হবে। তার চেয়ে বড় কথা, প্রথম আলো মূলত সংবাদ প্রকাশ করে বলে সম্ভবত বিশেষ কিছু শব্দের প্রতি দুর্বলতা আছে সেখানে। সে ক্ষেত্রে পরিসংখ্যানটা আনবায়সড হবে না। এ বায়াস দূর করতে হলে কোন প্রকাশনা সংস্থা থেকে প্রচুর লেখা জোগাড় করার দরকার হবে। উল্লেখ্য, আমি এখনও বাংলা প্রমিত লেখার উল্লেখযোগ্য কোন সংগ্রহ বা করপাস পাইনি। ইংল্যান্ডের একটা বিশ্ববিদ্যালয়ের কিছু সংগ্রহ আছে, তবে তাতে কনভার্শনগত প্রচুর ভুল আছে। আর লেখাগুলোও বিদ্যাসাগর আমলের।
প্রথম আলো থেকে শব্দ সংগ্রহের কাজটা তুলনামূলকভাবে সহজ। প্রথম আলোর কাছে চাইতে পারি, সাড়া না পেলে অনলাইনে থাকা তাদের আর্কাইভকে স্ক্র্যাপ করে প্রয়োজনীয় ডেটা সংগ্রহ করতে পারি। কোন প্রকাশনা সংস্থা তাদের লেখা শেয়ার করতে রাজী হবে না, এটা মনে হয় ধরেই নিতে পারি।
প্রযুক্তিগত সীমাবদ্ধতা:
আমার হিসাবে একটা নির্ভরযোগ্য বানান শোধক বানাতে হলে শব্দ তালিকায় আনুমানিক সাড়ে তিন থেকে চার লাখ শব্দ থাকবে। বাংলা ভাষায় শব্দের গড় দৈর্ঘ্য প্রায় ৭/৮ অক্ষরের মতো। ইউনিকোডের utf-8 নিয়মে বাংলা প্রতিটি মূল অক্ষরের জন্য তিন বাইট জায়গা লাগে। সংযুক্ত বর্ণের বেলায় সংযোগকারী বর্ণগুলোকে আলাদা বর্ণ ধরে হিসাব করতে হবে। বাংলা শব্দে গড়ে কী পরিমাণ সংযুক্ত বর্ণ থাকে তার পরিসংখ্যান আমার অজানা। আনুমানিক হিসাবে ধরে নিই গড়ে প্রতি শব্দে ১০টি বর্ণ থাকে (সংযুক্ত বর্ণ খুব কমই ব্যবহৃত হয়)। তার মানে, প্রতিটি শব্দের জন্য আমাদের ১০×৩ = ৩০ বাইট মেমরির দরকার। শব্দের শেষ চিহ্ণ ও আরো কিছু ওভারহেড মিলিয়ে সেটা ৩৫ ধরে নেয়া যাক। প্রতিটি শব্দের জন্য ৩৫ হিসাবে ৩.৫ লাখ শব্দের জন্য মেমরির প্রয়োজন প্রায় ১২ মেগার।
বানান পরীক্ষার সময় শব্দতালিকাতে আমাদের অহরহ খুঁজতে হবে। তাই শব্দগুলোকে এমনভাবে রাখতে হবে যাতে খুব দ্রুত তাতে খোঁজ করা যায়। এ কাজের জন্য সবচেয়ে উপযুক্ত ডেটা স্ট্রাকচার হলো হ্যাশম্যাপ। ফাইলে রাখা শব্দের তালিকা থেকে হ্যাশম্যাপ বানাতে বেশ অনেকটা সময় লেগে যাবে। কিন্তু, একবার বানানো হয়ে গেলে তাতে শব্দ খুঁজে পেতে তেমন একটা সময় লাগবে না।
বানান পরীক্ষার জন্য আমরা প্রদত্ত শব্দকে শব্দতালিকাতে খুঁজে দেখব। তালিকাতে থাকলে শব্দটি সঠিক, আর না থাকলে তার ভুল বলে ধরে নেব।
সাজেশন/পরামর্শ তৈরী:
এটি হচ্ছে স্পেল চেকারের সবচেয়ে কঠিন অংশ। নির্ভরযোগ্য সাজেশন দিতে পারার উপরই একটা স্পেল চেকারের ভাল-মন্দ নির্ভর করে। সাজেশনের জন্য আলাদা তালিকা রাখা যেতে পারে, আবার মূল তালিকার সাথেও থাকতে পারে। যে ভাবেই রাখা হোক, সাজেশন করার জন্য শব্দের পরিবর্তে তার মেটাকোড রাখতে হবে যাতে সাজেশন বের করার সময় কাছাকাছি শব্দের হদিস পাওয়া যায়। এবার পাওয়া শব্দগুলোকে তাদের মেরিট অনুসারে সাজাতে হবে যাতে সবচেয়ে বেশী সম্ভাবনার শব্দটি সাজেশন তালিকার প্রথমে আসে। ঠিক কী পদ্ধতিতে শব্দের মেরিট ঠিক করা হবে তা নিয়ে অনেক চিন্তার অবকাশ আছে।
সাজেশন বা পরামর্শ তৈরীর সময় একজন সাধারণ লেখক বাংলা লেখার সময় কী ধরনের ভুল করে তা জানা থাকলে অনেক সুবিধা হবে। বাংলা লেখার সময় কী ধরনের ভুল বেশী হয় তার সঠিক পরিসংখ্যান নেই। এখন অনেকে ইংরেজী উচ্চারণে বাংলা লিখছে (যেটাকে ফনেটিক বলছে অনেকে)। তাদের বেলায় ভুলের ব্যপারটা ভিন্ন হবে এটা আমি নিশ্চিত। বিজয় দিয়ে লিখে যারা কনভার্ট করে, বা ইউনিবিজয় দিয়ে লিখে তাদের ভুলের পরিসংখ্যানটা কিছুটা অনুমেয়। তবে এক্ষত্রেও গবেষণার সুযোগ আছে।
(এ ব্যপারটা নিয়ে আমি সচলের কিছু লেখকের লেখার উপর একটা কাজ করার ইচ্ছা রাখি। তাদের বেশ কিছু লেখা সংগ্রহ করে তাতে ভুলের পরিসংখ্যান বের করতে চেষ্টা করব। পরে, তারা কে কী পদ্ধতিতে টাইপ করেছেন তা জানতে চাইব। কার কার লেখা বাছাই করব তা এখনই বলছি না, তাতে পরিসংখ্যান সঠিক হবে না। আর এর ফলাফল স্পেলচেকার ছাড়াও অন্য কাজে লাগবে। এতে কপিরাইটের সমস্যা আছে বলে মনে করছি না। )
অনলাইন বনাম ডেস্কটপ:
ইন্টারনেটের গতি বাড়তে থাকায় অনেকেই অনলাইন টুল পছন্দ করে। সেজন্য অনলাইন স্পেলচেকার যে জনপ্রিয় হবে এতে কোন সন্দেহ নেই। কিন্তু এক্ষেত্রে কিছু সীমাবদ্ধতা আছে।
প্রথম দিকে যেমন বলেছি, যে কেবল শব্দতালিকার আকার হতে পারে ১২মেগ। সেটা হ্যাশম্যাপে রাখলে তা অন্তত ২০/৩০ মেগ মেমরি নিবে। পিএইচপি কোন স্ক্রিপ্টের জন্য এটা অস্বাভাবিক। আবার এই ১২মেগা ডিস্ক থেকে প্রতিবার পড়ার জন্য সার্ভারের স্পিডের উপর নির্ভর করে ১/২ মিনিট পর্যন্ত লেগে যেতে পারে। দ্বিতীয়ত, সাজেশন তৈরি কালে সবচেয়ে বেশী সময় ব্যয়িত হয়। সার্ভারের সীমাবদ্ধতার জন্য পিএইচপি কোন স্ক্রিপ্ট অধিক সময় ধরে চলতে পারবে না।
এ দুটো সমস্যা এড়ানোর একমাত্র উপায় হলো ডেডিকেটেড সাভার্র ব্যবহার করা। এতে করেও পিইএচপি কাজটা করতে পারবে কিনা সন্দেহ। সি++ এ লিখে একটা সার্ভিস ডেমন হিসাবে চালালে তা অনেক দ্রুত হবে, এটা অনুমান করতে পারি।
অন্যান্য কথা:
স্পেলচেকার বানাতে প্রযুক্তিগত যে সমস্যা তা কাটানো তত কঠিন না যতটা কঠিন একটা শব্দ তালিকা জোগাড় করা। সাধারণ ভুলের একটা পরিসংখ্যান দাঁড়া করানোও কঠিন হবে না। শব্দ তালিকা একা কারো পক্ষে বানানো বছর খানেকের কাজ। একাজে দলগত অংশগ্রহণ অপরিহার্য।
মন্তব্য
আমি কবিতা সাহিত্যও বুঝি না... প্রযুক্তি তো না-ই... কঠিন সমস্যায় পতিত হইলাম... না প্রেমিক না বিপ্লবী টাইপ অবস্থা আমার...
কিন্তু আপনে যে বাড়িত গিয়া আমারে কিছু ডাটা পাঠাইবেন বললেন সেই কবে... বাড়িতে কি এখনো যান নাই জনাব?
ভালো থাইকেন...
______________________________________
পথই আমার পথের আড়াল
______________________________________
পথই আমার পথের আড়াল
আলমগীর, আপনাকে ধন্যবাদ জানিয়ে বলতে চাই যে, প্রথম আলোকে স্ট্যান্ডার্ড না ধরে বাঙলাএকাডেমীর সাম্প্রতিক কালের প্রকাশিত গ্রন্থ, পত্রিকাগুলোর সাহায্য নিলেই মনে হয় ভূলের পরিমাণ কম হবে। প্রথম আলো অপ্রচলিত শব্দও ব্যবহার করে।
____________________________________
ব্যাকুল প্রত্যাশা উর্ধমুখী; হয়তো বা কেটে যাবে মেঘ।
দূর হবে শকুনের ছাঁয়া। কাটাবে আঁধার আমাদের ঘোলা চোখ
আলোকের উদ্ভাসনে; হবে পুন: পল্লবীত বিশুষ্ক বৃক্ষের ডাল।
___________________________
লাইগ্যা থাকিস, ছাড়িস না!
আপনার বুদ্ধি চমৎকার, কিন্তু সমস্যা হচ্ছে এগুলোর ইলেকট্রনিক কপি পাওয়া। প্রথম আলোর বেলায় সেটা হাতের কাছেই।
তাইলে আমি কিছু কই নাই!
____________________________________
ব্যাকুল প্রত্যাশা উর্ধমুখী; হয়তো বা কেটে যাবে মেঘ।
দূর হবে শকুনের ছাঁয়া। কাটাবে আঁধার আমাদের ঘোলা চোখ
আলোকের উদ্ভাসনে; হবে পুন: পল্লবীত বিশুষ্ক বৃক্ষের ডাল।
___________________________
লাইগ্যা থাকিস, ছাড়িস না!
চমৎকার পোস্ট। প্রথম পর্বের চেয়ে এই দ্বিতীয় পর্বটা অনেক বেশি বোধগম্য মনে হয়েছে আমার কাছে।
হ্যাশম্যাপ নিয়ে কোন ধারণা নেই আমার। পরবর্তীতে সময় পেলে এর ওপর আলোকপাত করবেন কি?
হাঁটুপানির জলদস্যু
ধন্যবাদ, দুএকজনের ভাল লাগলেও ভাল লাগে।
হ্যাশম্যাপ হলো পিএইচপিতে যা এসোসিয়েটিভ এরে, যেখানে ডেটা দিয়ে ইনডেক্সিং করা যায়। যেমন (যদি পিএইচপি পরিচিত হয় )
$names["karim"] = 1;
$names["rahim"] = 1;
$names["soleman"] = 1;
এবার কোন নাম, ধরা যাক $aname তালিকায় আছে কিনা তা দেখার জন্য:
if($namses[$aname] == 1)
{
echo "yes, it is in the list";
}
else
{
echo "oops! not in the list";
}
একদম সাদা বাংলায় হ্যাশিংয়ের কন্সেপ্টটা এইরকম ...
ধরেন আপনি একহাজার এন্ট্রির একটা লিস্ট থেকে কোন নির্দিষ্ট এন্ট্রি খুঁজতেছেন ...
আপনার হাতে দুইটা উপায় আছেঃ
১) লিস্টির গোড়া থেকে শুরু করে একে একে একহাজার এন্ট্রি চেক করা ...
২) আপনি কোনভাবে আগে থেকেই জানেন যে ঐ এন্ট্রিটা থাকলে একটা নির্দিষ্ট জায়গায় থাকবে, আপ্নি সোজা ঐ ঘরে যাবেন, দেখবেন আছে কিনা ... না থাকলে নাই বলে জানায়ে দিবেন ... আপনার বাকি ৯৯৯টা ঘর চেক করা লাগবে না ...
এই দ্বিতীয় উপায়টাই হচ্ছে হ্যাশিং ...
এক্ষেত্রে আপনার লাগবে একটা ভালো হ্যাশ ফাংশন, যেটা কোন একটা ভ্যালুকে একটা ইউনিক ইনডেক্সে রূপান্তর করবে ...
খুব সিম্পল একটা উদাহরণ হতে পারে এরকমঃ আপ্নি একটা বিশাল পার্কিং লটে গাড়ি রাখতে গেছেন ... লটের নিয়ম হইলো আপ্নার গাড়ির নাম্বারের লাস্ট দুই ডিজিট যত, আপ্নি সেই স্পটে গাড়ি রাখবেন ...
ধরেন আপ্নার গাড়ির নাম্বার ১২৩৪, তাহলে আপ্নার গাড়ি ৩৪ নাম্বার স্পটের বাইরে থাকতে পারবে না ... আপ্নি পার্টিতে বালিকা নিয়া মাস্তি করার পরে ফিরে যাওয়ার সময় পুরা পার্কিং লটে গাড়ি খুঁজবেন না ... সোজা ৩৪ নাম্বার স্পটে যাবেন, গাড়ি থাকলে ভালো, না থাকলে আর কোথাও খুঁজার দরকার নাই, পুলিস ডাকেন, আপনার গাড়ি গেছে ...
এখন এই সিস্টেমের মেইন সমস্যা হইল ভালো একটা হ্যাশ ফাংশন খুঁজে বের করা ... যেটা প্রত্যেকটা ভ্যালুর জন্য একটা ইউনিক ইন্ডেক্স খুঁজে বের করবে ... এক পার্কিং স্পটের জন্য দুই গাড়ির মালিক দুই মুশকো জোয়ান হাতাহাতি করবে আর আশপাশে খালি জায়গা পড়ে থাকবে সেটা কোন কাজের কথা না
আপাতত এইটুকুই, এর বেশি চাইলে উইকিপিডিয়া আছে
................................................................................
objects in the rear view mirror may appear closer than they are ...
চমৎকার! এরকম আরো লেখা চাই।
====
চিত্ত থাকুক সমুন্নত, উচ্চ থাকুক শির
টেকনিক্যাল জিনিসগুলি আমার বোধবুদ্ধির বাইরে। তার বাইরে যে বাস্তব সমস্যাগুলি ও সম্ভাব্য সমাধানের পদ্ধতি আলোচিত হয়েছে তা বুঝতে সমস্যা হয় না।
ভাবলেও ভালো লাগে ঘরের খেয়ে বনের মানুষ তাড়ানোর মানুষ আমাদের মধ্যে এখনো আছেন। জয় হোক আপনাদের।
আমি হয়তো অন্য কোনোভাবে সাহায্যে আসতে পারবো না। তবে আমার যা কিছু লেখালেখি, সেগুলিকে গিনিপিগ হিসেবে সমর্পণ করতে আমি সম্পূর্ণ সম্মত।
-----------------------------------------------
ছি ছি এত্তা জঞ্জাল!
-----------------------------------------------
ছি ছি এত্তা জঞ্জাল!
কর্পাস নিয়ে কি যে বিপদে পড়েছি !!
ইংলিশ করপাস দরকার ছিল একতা পার্টস ওফ স্পিচ টাগ্যার বানানোর জন্য। বাংলাদেশ থেকে জোগাড় করা ভারি মুশকিল। আর বাংলার এমন কোন করপাস আসে কিনা সেইটাই জানিনা !!
আপনার জন্য শুভকামনা রইল। তাড়াতাড়ি বানিয়ে ফেলেন। আমার মত অভাগাদের(যাদের বানান জ্ঞান নাই বললেই চলে) তাইলে একটু উপকার হয়।
....................................................................................
অতঃপর ফুটে যাবার ঠিক আগে হীরক খন্ডটা বুঝলো, সে আসলে ছিল একটা মামুলি বুদবুদ!
ইচ্ছার আগুনে জ্বলছি...
ইংরেজির ট্যাগ করা করপাস আছে। এ মূহুর্তে লিংক দিতে পারব না। তবে কমার্শিয়াল উদ্দেশ্যে ব্যবহার করা যাবে কি না বলতে পারছি না।
বাংলা করপাস আছে তিন জায়গায়। এখানে।
ভারতের একটা প্রতিষ্ঠানে, আর ব্র্যাক বিশ্ববিদ্যালয়ে।
নতুন মন্তব্য করুন