ক্রিকেট কনটেন্ট পাইপলাইনের নীরব ব্যর্থতা: যে কারণে একটি বিশ্লেষণ শুরুর আগেই শেষ হয়ে গেল
**মূল উত্তর:** Stage-1 এক্সট্রাকশনে ডোমেইন লেবেল ছাড়া সব ফিল্ড খালি এসেছে, ফলে মূল লেখাটি বিশ্লেষণের উপযোগী নয় এবং এই খালি ফলাফল নীরব ব্যর্থতার লক্ষণ। **মূল তথ্য:** - Article Title, Source, Type সবই N/A, তাই লেখার ধরন নির্ধারণ করা যায় না। - Information Points শূন্য, ফলে কোনো দাবি উৎস পর্যন্ত করা সম্ভব নয়। - Entities Involved নির্দেশ করে তথ্য থেকে চিহ্নিত করতে, কিন্তু উপরে কোনো তথ্য নেই। - Time Sensitivity ও Source Quality মূল্যায়ন হয়নি, কারণ source ফিল্ড অনুপস্থিত। - সর্বাধিক সম্ভাব্য কারণ: আপস্ট্রিম খালি রেসপন্স, ভুল সিলেক্টর, অথবা পার্স স্কিমা অমিল। **উৎস:** Stage-1 বিশ্লেষণ আউটপুট, ২০২৬ সাল। **সম্পর্কিত প্রশ্নোত্তর:** প্রশ্ন: খালি রেজাল্ট মানে কি মূল লেখায় তথ্য ছিল না? উত্তর: সম্ভবত নয়, বরং এক্সট্রাকশন যন্ত্র তথ্য তুলতে ব্যর্থ হয়েছে। প্রশ্ন: প্রথমে কী যাচাই করা উচিত? উত্তর: ক্রলের করা টেক্সটের দৈর্ঘ্য ও Stage-1 raw response। প্রশ্ন: এই ব্যর্থতা কেন বিপজ্জনক? উত্তর: কারণ এটি কোনো এরর না দিয়ে নীরবে শূন্য ফলাফল দেয়, যা ভুল বিশ্লেষণের দিকে নিতে পারে।
শুরুটা একটা ফাঁকা টেবিল দিয়ে। চারটি সারি, বাঁ পাশে ফিল্ডের নাম, ডান পাশে সারিবদ্ধভাবে লেখা N/A। Article Title নেই, Source নেই, Type নেই, Information Points শূন্য। শুধু একটা জায়গায় সবুজ সংকেত জ্বলছে — Domain Label: cricket_world।
ক্রিকেট নিউজরুমে কাজ করতে গিয়ে আমি এই দৃশ্যটা চিনি। স্কোরবোর্ডে দল দুটো লেখা আছে, কিন্তু কোনো ইনিংস শুরু হয়নি। উপস্থিতি আছে, উপাদান নেই। যিনি রিপোর্ট লেখেন, তার কাছে এ অবস্থায় সবচেয়ে সৎ কাজটা হলো ব্যাটিং না করা — এবং কেন ব্যাটিং হলো না, সেটা বলা।
গত কয়েক বছর ধরে ক্রিকেট কভারেজের একটা বড় অংশ ডেটা পাইপলাইনের ওপর নির্ভর করছে। স্ট্যাটস এজি, ইএসপিএনক্রিকইনফোর স্কোরকার্ড ফিড, স্থানীয় ফটোকার্ড, অনলাইন ট্রান্সক্রিপ্ট — এই উৎসগুলো থেকে স্বয়ংক্রিয়ভাবে তথ্য তুলে আনা হয়, তারপর সাংবাদিক সেটা যাচাই করে লেখেন। শিল্পটার ভেতরের সত্য হলো, এই চেইনের সবচেয়ে দুর্বল অংশ কখনো ক্রিকেটার নন, কখনো সম্পাদক নন — চেইনের প্রথম ধাপ, অর্থাৎ কাঁচামাল তোলার যন্ত্রটা।
এখানে যা ঘটেছে, সেটা ঠিক তেমনই একটা ঘটনা। Stage-1 নামের যে ধাপটি মূল লেখা থেকে তথ্য বের করার কথা, সেটি কোনো তথ্য বের করেনি। Domain Label ছাড়া সব ফিল্ড খালি। কিন্তু খালি মানে ব্যর্থ নয় — খালি মানে দুটো ভিন্ন জিনিস হতে পারে। এক, ওই লেখায় সত্যিই কোনো তথ্য ছিল না। দুই, তথ্য ছিল, কিন্তু যন্ত্রটা সেটা তুলতে পারেনি। দ্বিতীয়টা অনেক বেশি সম্ভাব্য, এবং দ্বিতীয়টাই বিপজ্জনক।
পার্থক্যটা কেন গুরুত্বপূর্ণ? কারণ একটি খালি রেজাল্ট যদি সিস্টেম থেকে নীরবে বেরিয়ে যায়, তাহলে পরের ধাপে কেউ ধরে নিতে পারে লেখাটা তথ্যহীন। আর যদি কেউ ওই খালি জায়গা নিজের অনুমান দিয়ে ভরাট করে, তাহলে তৈরি হয় এমন ক্রিকেট প্রতিবেদন যেটা পড়তে ভালো লাগে কিন্তু যাচাই করা যায় না। চ্যাটোগ্রামের ক্লাব ম্যাচ হোক আর ওয়ার্ল্ড কাপের ফাইনাল — তথ্যহীন বাক্য সবচেয়ে দামি জিনিসটাই নষ্ট করে: পাঠকের আস্থা।
আমার অভিজ্ঞতায় স্ক্র্যাপিং বা এক্সট্রাকশনের ব্যর্থতা প্রায় সবসময় চারটি জায়গার একটায় ঘটে। প্রথমটা, আপস্ট্রিম রিকোয়েস্ট ফাঁকা ফিরেছে — সাইটটি 403 দিয়েছে, পেওয়ালের পেছনে মূল লেখা লুকানো, অথবা পেজটা জাভাস্ক্রিপ্টে রেন্ডার হয় বলে ক্রলার শুধু একটা খোলস পেয়েছে। দ্বিতীয়টা, কনটেন্ট লোকেটর ভুল জায়গায় আঙুল রাখছে — CSS বা XPath সিলেক্টর সাইটের নতুন DOM-এর সঙ্গে মিলছে না, ফলে টেক্সট নোডের বদলে ফাঁকা এলিমেন্ট ধরা পড়ছে। তৃতীয়টা, মডেল আউটপুট আর পার্সার স্কিমার মধ্যে অমিল — মডেল হয়তো উত্তর দিয়েছে, কিন্তু ফরম্যাট মেলেনি বলে সেটা নীরবে ফেলে দেওয়া হয়েছে। চতুর্থটা, ইনপুট দৈর্ঘ্যের সীমা — লম্বা লেখা কেটে এত ছোট টুকরো হয়েছে যে বিশ্লেষণের মতো কিছুই টেকেনি।
এই চারটার মধ্যে তৃতীয়টা সবচেয়ে ধূর্ত। স্ক্র্যাপিং ব্যর্থ হলে সাধারণত লগে এরর থাকে, স্ট্যাটাস কোড থাকে। কিন্তু পার্সিং স্তরে ফেলে দেওয়া আউটপুট প্রায়ই কোনো চিহ্ন রাখে না। সিস্টেম সফলভাবে চলেছে, শুধু ফলাফল শূন্য। এটাই নীরব ব্যর্থতা — silent failure। ক্রিকেট ভাষায় বললে, বোলার রানআপ করেছেন, বল ছেড়েছেন, কিন্তু আম্পায়ার নো-বলও দেননি, ওয়াইডও দেননি, কিছুই হয়নি।
আর এখানেই একটা সাংবাদিকতার নীতি জড়িয়ে যায়। একটি বিশ্লেষণ তখনই মূল্যবান যখন তার প্রতিটি দাবিযোগ্য — অর্থাৎ উৎস পর্যন্ত ফিরে যাওয়া যায়। এই Stage-1 রেজাল্টে Information Points শূন্য, Entities Involved-এ লেখা আছে 'উপরের তথ্য থেকে চিহ্নিত করতে হবে', অথচ উপরে তথ্য নেই। Time Sensitivity আর Source Quality-ও মূল্যায়ন হয়নি, কারণ সেগুলোও তথ্যের source ফিল্ডের ওপর নির্ভরশীল। শূন্যের ওপর দাঁড়িয়ে শূন্য।
এমন অবস্থায় কেউ যদি 'cricket_world' লেবেলটা ধরে নিয়ে একটা সাধারণ ক্রিকেট বিশ্লেষণ লিখে ফেলেন — সিরিজের গুরুত্ব, দলের ভারসাম্য, তারকা খেলোয়াড়ের ফর্ম — সেটা পড়তে খারাপ লাগবে না। কিন্তু ওই লেখার সঙ্গে মূল নিবন্ধের কোনো সম্পর্ক থাকবে না। সেটা হবে ঠিক সেই ধরনের ভরাট করা ক্রিকেট কনটেন্ট, যেটা ইন্টারনেটে ইতিমধ্যে অতিরিক্ত। পার্থক্য শুধু এই যে, এবার সেটা একটা যন্ত্রের ফাঁকা আউটপুটের ওপর দাঁড়িয়ে তৈরি হবে।
একটা বাস্তব উদাহরণ মনে পড়ে। কয়েক বছর আগে একটি আন্তর্জাতিক টুর্নামেন্ট কভার করার সময় আমাদের ফিডে একই সমস্যা হয়েছিল — স্কোর ফিডে ম্যাচ ছিল, কিন্তু উইকেটের ডেটা আসেনি। কোনো এরর মেসেজ নেই। আমরা প্রায় লিখেই ফেলেছিলাম যে বোলাররা চাপ তৈরি করছে কিন্তু উইকেট পাচ্ছে না। পরে দেখা গেল, ফিডের ওই অংশটা কখনোই রিসিভ হয়নি। লেখাটা ছাপা হলে সেটা হতো সম্পূর্ণ ভুল বিশ্লেষণ, যার দায় কোনো ক্রিকেটারের নয় — আমাদের নিজেদের।

তাই এই মুহূর্তে সবচেয়ে দরকারি কাজ হলো ডিবাগিং, লেখা নয়। যাচাইয়ের ক্রমটাও স্পষ্ট: প্রথমে দেখুন মূল ক্রলের করা টেক্সটের দৈর্ঘ্য কত এবং শুরুটা কেমন — যদি মাত্র কয়েকশ অক্ষর হয় বা HTML-এর খোলস হয়, তাহলে সমস্যা প্রথম ধাপে। তারপর Stage-1-এর raw response দেখুন — মডেল আদৌ কিছু ফিরিয়েছিল কি না। সবশেষে পার্স করা স্ট্রাকচার দেখুন — উত্তর এসেছিল কিন্তু ফেলে দেওয়া হয়েছে কি না। বেশিরভাগ ক্ষেত্রেই উত্তর মিলবে প্রথম বা তৃতীয় ধাপে।
এই ফাঁকা টেবিলটা আসলে একটা সুযোগ। কারণ এটা আমাদের মনে করিয়ে দেয়, ক্রিকেট সাংবাদিকতার নতুন অবকাঠামোয় সবচেয়ে বড় ঝুঁকি ভুল তথ্য নয় — অনুপস্থিত তথ্য, যা ভুল তথ্যের চেয়েও বিপজ্জনক কারণ সেটা নিজের অস্তিত্ব জানান দেয় না। একটা ভুল স্কোর পাঠক ধরতে পারে। একটা ফাঁকা ফিল্ড কেউ ধরতে পারে না, যদি না কেউ সেটা নিয়ে প্রশ্ন তোলে।
সামনের দিনগুলোতে ক্রিকেট কভারেজ বেশি নির্ভর করবে এই স্বয়ংক্রিয় স্তরের ওপর। তখন সফলতার মাপকাঠি হবে কে বেশি লেখা তৈরি করল, তা নয় — বরং কে জানে কখন থামতে হবে। যে নিউজরুম একটা ফাঁকা রেজাল্ট দেখে বলতে পারে 'এটা দিয়ে বিশ্লেষণ হবে না', সেটাই হবে সবচেয়ে নির্ভরযোগ্য নিউজরুম। বাকিরা হয়তো দ্রুত লিখে ফেলবে, কিন্তু কে জানে কতগুলো ফাঁকা টেবিল তাদের লেখার ভেতরে লুকিয়ে থাকবে।
