Grapheme Cluster
গ্রাফিম ক্লাস্টার
একজন মানুষ চোখে যা 'একটা অক্ষর' হিসেবে দেখে, তার প্রকৃত সংজ্ঞা — যা প্রায়ই একাধিক Unicode code point মিলে গঠিত হয়।
also: extended grapheme cluster
ইংরেজিতে বেশিরভাগ সময় ১ code point = ১ visual অক্ষর, তাই এই পার্থক্যটা অদৃশ্য থাকে। বাংলায় তা না।
“বিদ্যা” শব্দে “দ্য” (দ + হসন্ত + য) একটা যুক্তাক্ষর — visually একটা একক গ্লিফ, কিন্তু তিনটা আলাদা code point দিয়ে গঠিত। একটা matra (কার) নিজেও একটা আলাদা code point, যেটা আগের ব্যঞ্জনবর্ণের সাথে visually যুক্ত হয়।
বাস্তব bug যা এখান থেকে জন্মায়: naive len() code point
গোনে, grapheme cluster না — ফলে string truncation একটা conjunct-কে
মাঝপথে কেটে ফেলে (visual glyph ভেঙে যায়), cursor/backspace শুধু
শেষ code point মোছে (পুরো visual অক্ষর না), আর character-limit
(যেমন সোশ্যাল মিডিয়া পোস্ট) ভুল সংখ্যা গোনে।
সঠিক সমাধান — Unicode Standard Annex #29 (UAX #29)-এর grapheme
cluster boundary নিয়ম মেনে চলা কোনো library ব্যবহার করা (Python-এ
regex মডিউলের \X, বা grapheme প্যাকেজ), len()-এর বদলে।
NFC normalization (একই দৃশ্যমান অক্ষরের ভিন্ন code point sequence একই canonical রূপে আনা) এই সমস্যার একটা কাছাকাছি কিন্তু আলাদা সমস্যা সমাধান করে — string equality-র জন্য গুরুত্বপূর্ণ।