স্কিমা ঠিক, ভেতরটা শূন্য: ব্যাডমিন্টন ডেটা পাইপলাইনের এক নীরব ব্যর্থতার অডিট
**মূল উত্তর:** ব্যাডমিন্টন-বিষয়ক এক Stage-1 আউটপুটে শিরোনাম, সূত্র, সারসংক্ষেপ ও তথ্যবিন্দুর তালিকা—সবই ফাঁকা ছিল; শুধু domain: badminton পাওয়া যায়। ফলে ওই উপাদানে গভীর বিশ্লেষণ সম্ভব নয়; এটি ফেচ বা এক্সট্রাকশনের নীরব ব্যর্থতা, বিষয়বস্তুর অভাব নয়। **মূল তথ্য:** - Stage-1 আউটপুটের এগারোটি ফিল্ডের মধ্যে শিরোনাম, সূত্র, ধরন, সারসংক্ষেপ ও উদ্দেশ্য—সবই ফাঁকা বা "প্রযোজ্য নয়"। - তথ্যবিন্দুর তালিকা সম্পূর্ণ খালি থাকায় এনটিটি, টাইমলাইন ও প্রমাণশৃঙ্খল—সবই অচল হয়ে পড়ে। - সম্ভাব্য কারণের মধ্যে আছে ২০০ স্ট্যাটাসসহ ফাঁকা বডি, ভাঙা সিলেক্টর, ওসিআর না চলা এবং মডেল কলের সময়সীমা শেষ হওয়া। - যাচাইপথ: Stage-1-এর প্রবেশপথে কাঁচা টেক্সটের দৈর্ঘ্য ও প্রথম ৫০০ অক্ষর মুদ্রণ করা। - গভীর বিশ্লেষণের ন্যূনতম শর্ত: এক লাইনের সারসংক্ষেপ, অন্তত পাঁচটি তথ্যবিন্দু, এবং লেখক বা প্রকাশমাধ্যমের পরিচয়। **সূত্র:** অভ্যন্তরীণ Stage-1 যাচাই প্রতিবেদন, প্রকাশের তারিখ অনির্দিষ্ট; বহিঃস্থ ক্রস-চেক সম্পন্ন হয়নি। **সম্ভাব্য পরবর্তী প্রশ্ন:** প্রশ্ন: ফাঁকা Stage-1 ফলাফল কি ব্যাডমিন্টনের ডেটা কভারেজ দুর্বল প্রমাণ করে? উত্তর: না, এটি শুধু পাইপলাইনের এক ধাপের ব্যর্থতা দেখায়; বিষয়ভিত্তিক কোনো সিদ্ধান্ত এর থেকে টানা যায় না। প্রশ্ন: গভীর বিশ্লেষণ শুরুর জন্য সর্বনিম্ন কী দরকার? উত্তর: এক লাইনের সারসংক্ষেপ, অন্তত পাঁচটি তথ্যবিন্দু এবং লেখক বা প্রকাশমাধ্যম—এই তিনটি ছাড়া বিশ্লেষণ অনুমানে পরিণত হয়। প্রশ্ন: এই ধরনের নীরব ব্যর্থতা কোন স্তরে ধরা পড়ার কথা ছিল? উত্তর: Stage-1-এর প্রবেশপথেই কাঁচা ও নিষ্কাশিত টেক্সটের দৈর্ঘ্য মিলিয়ে দেখলে ব্যর্থতা সাথে সাথে ধরা পড়ত।
গত সপ্তাহে ডেস্কে একটা ফাইল এল। নাম ছিল ব্যাডমিন্টন-বিষয়ক এক প্রতিবেদনের প্রথম স্তরের আউটপুট। খোলার পর প্রথম দশ সেকেন্ডে মনে হয়েছিল সব ঠিক আছে — এগারোটা ফিল্ড, প্রতিটার নাম জায়গামতো, স্কিমা ভ্যালিডেটর কোনো এরর দেয়নি, কোণায় সবুজ টিক বসানো। তারপর চোখ গেল মানের ঘরে। শিরোনাম: প্রযোজ্য নয়। সূত্র: অশ্রেণিবদ্ধ। ধরন: শ্রেণিবদ্ধ নয়। এক লাইনের সারসংক্ষেপ: ফাঁকা। লেখকের অবস্থান: প্রযোজ্য নয়। লেখার উদ্দেশ্য: প্রযোজ্য নয়। আর সবার নিচে যে তালিকার ওপর বাকি সবটা দাঁড়িয়ে থাকে — তথ্যবিন্দুর তালিকা — সেটাও সম্পূর্ণ ফাঁকা।
পুরো ফাইলে জীবন্ত ছিল একটিমাত্র লাইন: domain: badminton।
আমি একটা ফাঁকা ফাইল নিয়ে প্রতিবেদন লিখছি, আর এটা কোনো কৌতুক নয়। যে পাইপলাইন প্রতিদিন ডেস্কে খবর জোগায়, তার আর্কাইভে এমন ফাইল কতগুলো জমে আছে — সেটা জানার চেষ্টা করছি বলেই এটা লিখতে বসা। নিয়মিত মরসুমে ডেস্কে প্রকাশের চাপ থাকে সপ্তাহে সপ্তাহে। সেই চাপই এই ধরনের ফাইলকে বিপজ্জনক করে তোলে, কারণ ফাঁকা ঘর পূরণ করার প্রলোভন তখন সবচেয়ে বেশি।
Stage-1 কী করে, সেটা আগে পরিষ্কার করা দরকার, কারণ গোলমালটা ঠিক সেখানেই। ক্রীড়া ডেটা ডেস্কে Stage-1-এর কাজ একটাই: কাঁচা টেক্সট থেকে তথ্যবিন্দু তোলা। একটা তথ্যবিন্দু মানে এক টুকরো যাচাইযোগ্য দাবি — কে, কখন, কোথায়, কী সংখ্যায়। এই তথ্যবিন্দুই পরমাণু। তার ওপরেই বসে এনটিটি শনাক্তকরণ, টাইমলাইন, প্রমাণশৃঙ্খল, মতের স্তরবিন্যাস। পরমাণু না থাকলে অণু তৈরি হয় না, আর অণু না থাকলে গল্পটা আর গল্প থাকে না — শুধু ছাপা অক্ষর হয়।
তাই ফাঁকা তালিকাটাই সবচেয়ে বড় ক্ষতি। বাকি ফিল্ডগুলো ফাঁকা হলে অন্তত একটা প্রশ্ন করা যায় — কোন ম্যাচ, কোন তারিখ, কে লিখল। তথ্যবিন্দু ফাঁকা হলে প্রশ্ন করাটাও অসম্ভব হয়ে পড়ে, কারণ প্রশ্ন করার জন্য যেই বস্তুটা দরকার, সেটাই নেই। এনটিটি লেখা আছে "উপরের তথ্যবিন্দু থেকে শনাক্ত করুন" — শর্তটা ভেঙে গেছে, কাজটা শুরুই হয়নি।
এখানে একটা বড় শিক্ষা আছে, আর সেটা ডেটার নয়, শাসনব্যবস্থার। স্কিমা ভ্যালিড মানে কনটেইনার ঠিক আছে; কনটেইনারে মাল আছে কি না, স্কিমা জানে না। আমাদের ভ্যালিডেটর শুধু আকৃতি দেখে, স substance দেখে না। ফলে একটা সম্পূর্ণ ব্যর্থ আউটপুট সবুজ টিক নিয়ে আর্কাইভে ঢুকে পড়ে, আর তিন মাস পর কেউ সেটা খুঁজে পায় না।
ব্যর্থতার পাঁচটা সম্ভাব্য কারণ আমি লিখে রাখছি, কারণ পরে এগুলো নিয়ে তর্ক হবে। প্রথমত, ফেচ সফল হয়েছে ২০০ স্ট্যাটাস দিয়ে কিন্তু বডি ফাঁকা — জাভাস্ক্রিপ্ট রেন্ডার, অ্যান্টি-বট চ্যালেঞ্জ পাতা, বা লগইন দেয়াল। দ্বিতীয়ত, সাইটের নকশা বদলানোর পর বডি সিলেক্টর আর মেলে না, ফাঁকা স্ট্রিং ফেরে। তৃতীয়ত, পিডিএফ বা ছবি-ভিত্তিক কনটেন্ট এইচটিএমএল পথে চলে গেছে, ওসিআর চালু হয়নি। চতুর্থত, মডেলের কল কেটে গেছে বা সময় শেষ হয়েছে, ফাঁকা JSON ফিরেছে, আর শিথিল ভ্যালিডেশন সেটাকে বৈধ বলে মেনে নিয়েছে। পঞ্চমত, এনকোডিং বা ভাষার সমস্যা — চীনা কনটেন্ট অসঙ্গতি ভেবে বাদ পড়েছে।
যাচাইয়ের পথটা সস্তা এবং দ্রুত। Stage-1-এর প্রবেশপথে কাঁচা ফেচ করা টেক্সটের দৈর্ঘ্য আর প্রথম ৫০০ অক্ষর ছাপিয়ে দিলেই দুটো প্রশ্নের উত্তর মিলে যায়: বডি আদৌ এসেছে কি, আর এসেছে বলে আমরা তুলতে পেরেছি কি। এই দুটো সংখ্যা ছাড়া আমি কোনোদিন ওই ফাইলের ওপর কথা বলি না।
আমি গল্প দিয়ে শুরু করি না; যে সারিটা কোথাও বসছে না, সেটা দিয়ে শুরু করি। এই ফাইলটা ছিল ঠিক সেই সারি।
২০১৭ সালে আমি ৬,১০০ শট নিজের হাতে গুনেছি, তার আগে মডেলটাকে চীনা ভাষায় কথা বলার অনুমতি দিইনি। দুশো চল্লিশ ম্যাচ, প্রতিটা শটে শরীরের অংশ, অ্যাসিস্টের ধরন, ডিফেন্সিভ প্রেশার আলাদা করে ট্যাগ করা। মডেল তখন বলেছিল লিগের এক ফরোয়ার্ডের ২০ গোলের পেছনে প্রকৃত দাবি ১৬.৪ এক্সজি — তিন দশমিক ছয় গোলের অতিরিক্ত পারফরম্যান্স, আর সেটা ফিনিশিংয়ের কারিগরি নয়, শট বাছাইয়ের ফল। অক্টোবর ২০১৭-তে ছাপা হওয়ার পর সেই লেখাটাই ছিল আমাদের আউটলেটের সবচেয়ে পঠিত প্রতিবেদন।
হাতে গোনার সেই অভ্যাস আমাকে একটা পার্থক্য শিখিয়েছে, যেটা কোনো ভ্যালিডেটর শেখাতে পারে না: "ওখানে নেই" আর "আমরা গুনতে পারিনি" এক জিনিস নয়। এই দুটোকে গুলিয়ে ফেললে সাংবাদিকতা আর ডেটা এনালিসিস — দুটোই একসাথে ভাঙে। ফাঁকা Stage-1 ফাইলটা প্রথম শ্রেণির, দ্বিতীয়টা নয়। কিন্তু ফাইলটা নিজে থেকে বলছে না সে কোন শ্রেণির।
সেই থেকে প্রতিটা সংখ্যার সঙ্গে তিনটে জিনিস লিখি: নমুনার আকার, তারিখের পরিসর, ত্রুটির সীমা। এই তিনটে ছাড়া সংখ্যা ছাপা মানে পাঠককে এমন একটা আত্মবিশ্বাস ধার দেওয়া, যেটা আমার নেই।
এখন কঠিন অংশটা। ফাঁকা ফাইলটা ব্যাডমিন্টন সম্পর্কে কিছুই বলে না। এটা একটা প্রলোভন যে আমরা বলতে বসব — ব্যাডমিন্টনের ডেটা কভারেজ দুর্বল, নয়তো মডেলটা ব্যাডমিন্টন বোঝে না। দুটোর কোনোটাই এই ফাইল থেকে প্রমাণিত হয় না। এখানে সম্পর্ক আর কারণ এক নয়। আমরা জানি পাইপলাইনের একটা ধাপে আউটপুট এল না; ওই ধাপটা ব্যাডমিন্টনের ম্যাচ কীভাবে দেখে, সেই প্রশ্নটা এই ফাইলে অনুপস্থিত।
দ্বিতীয় কথা, যেটা অনেকে উল্টোভাবে বলবে: একটা ফাঁকা ফলাফল বানানো ফলাফলের চেয়ে বেশি সৎ। হ্যাঁ, যদি সেটাকে ব্যর্থতা বলে চিহ্নিত করা হয়। আর যদি ফাইলটা "উল্লেখযোগ্য তথ্য পাওয়া যায়নি" লেখা অবস্থায় আর্কাইভে ঢোকে, তাহলে সততাটা মুছে যায়। তখন এটা ভূতের ডেটা হয়ে ওঠে। স্টেডিয়াম যখন ফাঁকা হলো, আমার মডেল তখনও ভিড় শুনতে পাচ্ছিল যারা সেখানে ছিল না — ২০২০-এর ওই অডিটে আমি দেখেছিলাম, লকডাউন-পূর্ব তিনশো ছয়টি বুন্দেসলিগা ম্যাচের সঙ্গে ১৬ মে ২০২০-র পুনঃশুরুর পরের তিরাশিটি ম্যাচ মিলিয়ে হোম উইন হার ৪৩.১ শতাংশ থেকে নেমে ৩৩.৭ শতাংশে দাঁড়িয়েছে, আর আমার মডেল হোম দলকে ম্যাচপ্রতি শূন্য দশমিক তেইশ এক্সজি বেশি দিয়ে যাচ্ছিল। প্রতিটি অডিট এক ছোট্ট স্বীকারোক্তি: মডেলটা আমারই ছিল, আর সেটা ভুল বলেছিল।
একটা সীমারেখা অবশ্য টানা দরকার। ১২ জুন ২০২১, ডেনমার্ক-ফিনল্যান্ড, ম্যাচের তেতাল্লিশতম মিনিটে যে মুহূর্তটা ঘটেছিল, সেখানে আমি একশো সাত মিনিট ফিড বন্ধ রেখে কিছুই ছাপিনি — সেটা মানবিক সার্কিট ব্রেকার। এখানে ব্যর্থতা অন্য রকম, সম্পূর্ণ কারিগরি। কারিগরি পতাকাটা আলাদা রাখতে হবে: "এই আউটপুট অসমর্থিত"। এর সঙ্গে নৈতিক উপদেশ মিশিয়ে দিলে ডেস্কের আসল সমস্যাটা ঢাকা পড়ে যায়, আর পাঠক ভাবেন ব্যাপারটা নৈতিকতা দিয়ে ঠিক হয়ে যাবে — অথচ আসলে দরকার ছিল একটা ফেচ-লগ।
তাই এগোনোর জন্য আমার তিনটে বিকল্প, অগ্রাধিকার ক্রমে। এক, মূল লেখার পূর্ণ পাঠ — নিজে তথ্যবিন্দু, এনটিটি, অবস্থান বের করে নেব। দুই, লিঙ্ক, যদি প্রকাশ্য হয় এবং ফেচ করা যায় বলে নিশ্চিত করা হয়। তিন, Stage-1-এর তিনটে মূল জিনিস: এক লাইনের সারসংক্ষেপ, অন্তত পাঁচটা তথ্যবিন্দু, আর লেখক বা প্রকাশমাধ্যমের পরিচয়। এর নিচে নামলে কোনো "গভীর বিশ্লেষণ" আর বিশ্লেষণ থাকে না, হয় বিনয়ী অনুমান, নয়তো খুশি করার জন্য বানানো। আমি বানানোটা করি না।
আমি প্রাক্-নিবন্ধিত সীমা ঠিক করেছি: কোনো পাইপলাইনের দরজায় দুটো সংখ্যা দিতে হবে — কাঁচা দৈর্ঘ্য, নিষ্কাশিত দৈর্ঘ্য। এই দুটো না এলে ওই ফাইল নিয়ে একটাও বাক্য লেখা হবে না, আর ব্যাডমিন্টন নিয়ে একটা বাক্য লিখতে হলে তার পাশে নমুনা, তারিখ, ত্রুটির সীমা — তিনটেই থাকতে হবে।
কিন্তু আসল প্রশ্নটা এই ফাইলটা নিয়ে নয়। আসল প্রশ্ন, আমাদের আর্কাইভে কতগুলো ফাইল ২০০ স্ট্যাটাস আর সবুজ টিক নিয়ে বসে আছে, যাদের ভেতরটা শূন্য। স্প্রেডশিটটা মঠ হয়ে গেছে, আর আমি তার শান্ত, একগুঁয়ে সন্ন্যাসী — তাই আজকের কাজটা একটা ফাঁকা ঘরকে ব্যর্থতা বলে নাম দেওয়া, আর যে লেখাটা এখনও আসেনি, তার নাম আগে না লেখা।



সংশ্লিষ্ট খেলোয়াড়গণ
সুপারিশকৃত
সিন্ধুর কোয়ার্টার ফাইনাল বিদায়ের আসল গল্প: কোর্টে হার, কিন্তু টেপ বলছে অন্য কথা2026-10-22
এশিয়ান গেমস ২০২৬: ভারতের ব্যাডমিন্টন বিদায়ের আসল কারণ সিন্দুর বয়স নয়, সিস্টেমের গভীরতা2026-10-12
অ্যান সি-ইয়ং এশিয়ান গেমসে দ্বিতীয়বার সোনা জিতে ইতিহাস গড়লেন2026-10-15
একটি হার, যার নাম কেউ জানে না: আন সেয়ং-ইয়ংয়ের ৫৬ জয়ের ভেতরের ফাঁক2026-10-14
সাতবিক-চিরাগের ৬৮ মিনিট: আসল গল্পটা দ্বিতীয় গেমের ১৯-২১2026-09-26
১৯-২১: নাগোয়ায় সাতwikসাইরাজ-চিরাগের বিদায়, আর একটা ঋণ যেভাবে সুদে দাঁড়াল2026-09-26
আইচিনোমিয়ার জিমনেসিয়াম, 'এশিয়ান গেমস ফাইনাল' আর সেপ্টেম্বর ২৮ — একটি হেডলাইনের তিনটি ফাটল2026-09-30
গুয়েন থুই লিনের নবম জাতীয় শিরোপা: ঘরোয়া আধিপত্যের আলোয় ঢাকা উত্তরসূরি সংকট2026-10-31
সুপারিশকৃত
২১-১২ থেকে ১৪-২১: এশিয়ান গেমস ২০২৬-এ সাতউইক-চিরাগের প্রথম রাউন্ড বিদায় এবং ভারতীয় ডাবলসের অসমাপ্ত খাতা2026-10-06
উনিশ মিনিটের স্বাক্ষর: সাতউইক-চিরাগের প্রথম রাউন্ড বিদায় আসলে কী বলছে2026-09-26
কুনলাভুত ভিদিৎসার্নের এশিয়ান গেমস সোনা: ৬৪ বছরের খরা, র্যালি-নিয়ন্ত্রণ আর একটি হাঁটুর নীরব খাতা2026-10-06
সিন্ধু-লক্ষ্যের র্যাঙ্কিং উত্থানের আড়ালে যে গল্পটি কেউ বলছে না2026-11-04
এশিয়ান গেমস ২০২৬: ভারতীয় ব্যাডমিন্টনের পদক-পতনের পেছনে রূপান্তরের ফাঁক2026-10-10
খালি ফাইল, ভারী দায়িত্ব: ব্যাডমিন্টন বিশ্লেষণে তথ্যের অনুপস্থিতি কেন নিজেই একটি সিদ্ধান্ত2026-10-22
একটি হার, যার নাম কেউ জানে না: আন সেয়ং-ইয়ংয়ের ৫৬ জয়ের ভেতরের ফাঁক2026-10-14
সিঙ্গাপুর ও থাইল্যান্ডের অন্ধকার ঘোড়া: এশিয়ান গেমসের ফাইনালে লোহ কিন ইয়ু বনাম কুনলাভুত — যে ম্যাচের কোনো তথ্যই যাচাই করা যাচ্ছে না2026-09-30
