ওয়ার্ডপ্রেসে বাংলায় অনুসন্ধান উন্নত করা

সর্বশেষ আপডেট:

ওয়ার্ডপ্রেস ওয়েবসাইটে বাংলায় সার্চের কিছু কমন সমস্যা নিয়ে এ নিবন্ধে আলোকপাত করা হয়েছে। সেই সাথে এর সমাধান করে কিভাবে ভিজিটরদের চাওয়া পূরণ করা যায়, সে বিষয়টি সুন্দরভাবে ফুটিয়ে তোলার চেষ্টা করা হয়েছে।

১। বাংলায় সার্চের ক্ষেত্রে সমস্যাসমূহ:

বিগত কিছুদিন ধরে আমি ওয়ার্ডপ্রেসে বাংলা অভিধান তৈরির কাজ করছি। সেখানে বাংলা শব্দ সার্চের ক্ষেত্রে দুরকমের সমস্যা খুঁজে পেয়েছি।

  1. সার্চ করে কাঙ্ক্ষিত শব্দটি খুঁজে না পাওয়া। বিশেষ করে, বিন্দু/নোকতাযুক্ত শব্দ (যেমন, আয়, গয়না ইত্যাদি) খুঁজে না পাওয়া।
  2. সার্চের ফলাফলে অতিরিক্ত শব্দ প্রদর্শিত হওয়া। যেমন, গড সার্চ করলে গড় শব্দটিও প্রদর্শন করে।

২.১। শব্দ খুঁজে না পাওয়ার কারণ:

কিছু কিছু বাংলা বর্ণ ও চিহ্ন ইউনিকোডে দুভাবে ফুটিয়ে তোলা যায়। বেশিরভাগ ক্ষেত্রে বর্ণগুলো দেখতে একই রকম হলেও ব্যবহৃত চিহ্নের এনকোডিং একরকম নয়। ফলে দেখা যায় যে, কোনো ওয়েবসাইটের টেক্সটে হয়তো একরকম ধারা ব্যবহার করা হয়েছে। কিন্তু একই টেক্সট অন্যভাবে টাইপ করে সার্চ করায় ভিজিটর আর কাঙ্ক্ষিত বিষয়টি খুঁজে পায় না।

একটি উদাহরণের সাহায্যে বিষয়টি বুঝানো যায়। একটি বাংলা শব্দ বড়ো। ধরা যাক, শব্দটিকে আমাদের ওয়েবসাইটে এভাবে টাইপ করেছি – ব + ড় + ও-কার। একই শব্দ কোনো ভিজিটর ব + ড + নোকতা + এ-কার + আ-কার এভাবে টাইপ করে সার্চ করলো। ভিজিটরের স্ক্রিনে শব্দটিকে বড়ো’র মতোই দেখাবে। কিন্তু আমাদের ওয়েবসাইটে এভাবে না থাকায় সার্চ রেজাল্টে তা প্রদর্শন করবে না।

আরো কিছু বর্ণ ও চিহ্নের ক্ষেত্রেও সেগুলো ভিন্নভাবে টাইপ করা সম্ভব। যেমন:

  • নোকতার ব্যবহার: ড়, ঢ়, য় ইত্যাদি বর্ণগুলো জিবোর্ডসহ অনেক অ্যাপে টাইপ করলে নোকতা সহকারে টাইপ হয়। একইভাবে ব-এর সাথে নোকতা দিয়ে র টাইপ করা সম্ভব।
  • আ টাইপিং: সরাসরি আ টাইপ না করে অনেকে অ + া এভাবে টাইপ করেন।
  • ও-কার ও ঔ-কার: একইভাবে ও-কার ও ঔ-কারের ক্ষেত্রে একটি চিহ্ন ব্যবহার না করে দুটি চিহ্ন ব্যবহার করা হয়। যেমন, ও-কারের ক্ষেত্রে এ-কার ও আ-কারের ব্যবহার (কো =>  ে + ক +  া)।

শেষের দুটি বিষয় সম্ভবত বিজয়/এনসি থেকে ইউনিকোডে কনভার্শনের কারণে হয়ে থাকতে পারে।

২.২। সমস্যার সমাধান:

যাই হোক, আমি টাইপের ক্ষেত্রে ব্যক্তিগতভাবে উক্ত বিষয়গুলো এড়িয়ে চলি। অর্থাৎ নোকতাবিহীন বর্ণ, সরাসরি আ এবং সরাসরি  ো  ৌ ব্যবহার করি।

কিন্তু সমস্যা এখানে নয়। সমস্যা হলো, যখন কেউ মোবাইল ফোনের জিবোর্ড অ্যাপ ব্যবহার করে আমার ওয়েবসাইটে কোনো কিছু সার্চ করে, তখন সার্চকৃত টেক্সটে/টার্মে নোকতা থাকার কারণে অনেক কিছু সার্চের ফলাফলে আসে না। আবার অনেকে কপি-পেস্ট করে সার্চ করে থাকেন। কপিকৃত টেক্সটে যদি কোনো সমস্যা থাকে তাহলেও তা সার্চের ফলাফলে দেখাবে না। ফলে ভিজিটরকে নিরাশ হতে হয়।

দৃশ্যমান টেক্সট দেখে বুঝার উপায় থাকেনা যে তা ওয়েবসাইটের টেক্সট থেকে আলাদা। তাই ইউজার এক্সপেরিয়েন্স (User Experience) উন্নত করার জন্যে সার্চকৃত টেক্সট-এর চিহ্নগুলোকে পরিবর্তন করে আমাদের ওয়েবসাইটে ব্যবহৃত চিহ্নের মতো করে নিতে হবে।

২.৩। সার্চকৃত বাংলা টেক্সট পরিবর্তনের প্রক্রিয়া:

তো চলুন আমরা এখন সার্চকৃত টেক্সট পরিবর্তন সম্পর্কে জানি। এক্ষেত্রে আমরা কিছু php কোড ব্যবহার করবো। এগুলো আমাদের থিমের functions.php ফাইলের শেষের দিকে কিংবা কাস্টম প্লাগইন তৈরি করে সেখানে ব্যবহার করতে পারি।

১। কী কী চিহ্ন পরিবর্তন করবো সেগুলো একটি অ্যারে’তে নিয়ে আসি।

$bn_unified_map = array (
	// Correct 'আ'
	"অা" => "আ", // অ + া > আ
	
	// Double to single kar
	"ো" => "ো", //  ে + া > ো
	"ৌ" => "ৌ", // ে + ৗ > ৌ
	
	// Nokta
	"ব়" => "র", // ব + ় > র
	"ড়" => "ড়", // ড + ় > ড়
	"ঢ়" => "ঢ়", // ঢ + ় > ঢ়
	"য়" => "য়", // য + ় > য়
	
	// Zero-width non-joiner (\u200c) is not necessary for word's last hosonto
	"্\u200c " => "্ ", // Notice the "Space" at the end
);

২। অ্যারে’তে অবস্থিত প্রতি জোড়ার প্রথটিকে দ্বিতীয়টি দ্বারা পরিবর্তন করতে হবে। এক্ষেত্রে আমরা strtr() ফাংশনটি ব্যবহার করতে পারি।

strtr($search_term, $bn_unified_map);

৩। আমরা শুধু সার্চকৃত টার্মের চিহ্নগুলো পরিবর্তন করবো। তাই strtr() ফাংশনটিকে নিচের মতো ব্যবহার করতে হবে।

function bn_unified_search_filter($query) {
	
	global $bn_unified_map;
	
	if ( !is_admin() && $query->is_main_query() ) {

		// Check if we are on a search page
		if ($query->is_search) {

			// Get the search query
			$search_term = get_search_query();

			// You can modify the search query here, and pass it to the query again.
			$search_term = strtr($search_term, $bn_unified_map);

			$query->set( 's', $search_term  );

		}

	}

}

add_action('pre_get_posts','bn_unified_search_filter');

৩.১। সার্চের ফলাফলে অতিরিক্ত শব্দ প্রদর্শনের কারণ:

সার্চের ফলাফলে অতিরিক্ত শব্দ প্রদর্শনের কিছু কারণ আমি খুঁজে পেয়েছি। এগুলো হলো:-

  1. নোকতা বা বিন্দু সহযোগে শব্দ টাইপ করার কারণে। যেমনিভাবে fat সার্চ দিলে father শব্দটিও সার্চ তালিকায় আসে, তেমনিভাবে গড সার্চ দিলে গড় (গড + নোকতা) শব্দটিও সার্চের তালিকায় প্রদর্শন করে।
  2. সার্চ রেজাল্টে Accented শব্দকে সাধারণত আলাদাভাবে বিবেচনা করে না। ফলে, abcd সার্চ দিলে ábçd শব্দও সার্চ রেজাল্টে দেখায়। তেমনিভাবে, গযব সার্চ দিলে গয়ব শব্দও চলে আসে।

৩.২। সার্চের ফলাফলে অনাকাঙ্ক্ষিত শব্দ প্রদর্শন বন্ধ করা:

১। নোকতা বা বিন্দু এড়িয়ে চলা।
২। MySQL collation হিসেবে utf8mb4_bin অথবা utf8mb4_general_ci সিলেক্ট করতে হবে। আমরা নিচের ধাপগুলো অনুসরণ করে phpMyAdmin প্যানেলে এ কাজটি করতে পারি।

  1. phpMyAdmin-এ লগইন করি।
  2. আমাদের ডাটাবেসের wp_posts টেবিলে যাই।
  3. Structure ট্যাবে যাই।
  4. post_title-এর পাশে change বোতামে ক্লিক করি।
  5. Collation হিসেবে utf8mb4_general_ci সিলেক্ট করে Save করি।

অনেক ক্ষেত্রে 1067 – Invalid default value for ‘post_date’ এরর মেসেজ দেখাতে পারে। সেক্ষেত্রে SQL ট্যাবে গিয়ে SET sql_mode = '' কমান্ডটি যোগ করে Collation পরিবর্তন করতে হবে।

SQL Command:

SET sql_mode = '';
ALTER TABLE `wp_posts`
CHANGE `post_title`
`post_title` TEXT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci
NOT NULL;

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।