আরবি তাশকীল সঠিকভাবে শেখার জন্য Amal অ্যাপ
5 মিনিটের পাঠMohammad Shaker

আরবি তাশকীল সঠিকভাবে শেখার জন্য Amal অ্যাপ

Amal অ্যাপ আরবি তাশকীল, শাদা ও হামজা সহ সকল ডায়াক্রিটিক চিহ্ন দক্ষতার সাথে পরিচালনা করে।

Engineering

দ্রুত উত্তর

Amal অ্যাপ আরবি তাশকীল, শাদা ও হামজা সহ সকল ডায়াক্রিটিক চিহ্ন দক্ষতার সাথে পরিচালনা করে।

আরবি তাশকীল সঠিকভাবে শেখার জন্য Amal অ্যাপ কিভাবে পরিচালনা করে

Amal আরবি তাশকীলের সব ক্ষেত্রে দক্ষ: ৮টি তাশকীল চিহ্ন (ফাথা, দাম্মা, কাসরা, শাদা, সুকুন, ফাথাতান, দাম্মাতান, কাসরাতান), ৪ ধরনের আলেফ (স্ট্যান্ডার্ড, মাদ্দা, হামজা উপরে, হামজা নিচে, ওয়াসলা), ৩ ধরনের হামজা (একাকী, ওয়াও-তে, ইয়েতে), এবং লাম-আলেফ যুক্তাক্ষর। অ্যাপের স্পিচ রিকগনিশন, টেক্সট রেন্ডারিং ও সাদৃশ্য স্কোরিং সব ডায়াক্রিটাইজড আরবিকে (“كَتَبَ”) এবং অডায়াক্রিটাইজড আরবির (“كتب”) মধ্যে পার্থক্য করে—যা অধিকাংশ আরবি শেখার অ্যাপ উপেক্ষা করে।

তাশকীল কেন শেখার জন্য গুরুত্বপূর্ণ

অস্পষ্টতার সমস্যা

ডায়াক্রিটিক ছাড়া আরবি ভাষায় অর্থ অস্পষ্ট হয়ে পড়ে:

  • "كتب" হতে পারে:
    • "kataba" (সে লিখেছে) — অতীত কাল
    • "kutub" (বইগুলি) — বহুবচন
    • "kutiba" (এটি লেখা হয়েছে) — নিকৃষ্ট পক্ষের বাক্য

সব একই বানান, ডায়াক্রিটিক ছাড়া। ডায়াক্রিটিক স্পষ্টতা বাড়ায়।

শেখার পর্যায়ক্রমিক উন্নয়ন

  1. শুরুকারী: ডায়াক্রিটিক সহ পড়া শিখুন (সহজ - স্বরবর্ণ চিহ্নিত)
  2. মধ্যবর্তী: ডায়াক্রিটিক সহ অনুশীলন করুন যতক্ষণ স্বয়ংক্রিয় না হয়
  3. উন্নত: আস্তে আস্তে ডায়াক্রিটিক বাদ দিন, পড়া কঠিন হবে
  4. প্রবীণ: ডায়াক্রিটিক ছাড়া সাবলীলভাবে পড়ুন (স্থানীয় স্তরের দক্ষতা)

অধিকাংশ আরবি শেখার অ্যাপ ধাপ ১ এড়িয়ে যায় — তারা তাশকীল শেখায় না বা সরিয়ে ফেলে, যা ভুল অভ্যাস তৈরি করে। Amal–এর ধাপগুলোর বৈজ্ঞানিক ভিত্তি শক্ত।

আমাদের ইউনিকোড স্তরের বাস্তবায়ন

তাশকীল চিহ্নগুলোর পরিচিতি (মোট ৮)

// lib/src/utils/arabic_extension.dart
class ArabicExtension {
  static const Map<String, String> tashkeelMarks = {
    'FATHA': '\u064E',      // َ (স্বরবর্ণ 'আ')
    'DAMMA': '\u064F',      // ُ (স্বরবর্ণ 'উ')
    'KASRA': '\u0650',      // ِ (স্বরবর্ণ 'ই')
    'SUKUN': '\u0652',      // ْ (কোন স্বরবর্ণ নেই)
    'SHADDA': '\u0651',     // ّ (দ্বিগুণ বর্ণ)
    'FATHATAN': '\u064B',   // ً (তানউইন 'আন')
    'DAMMATAN': '\u064C',   // ٌ (তানউইন 'উন')
    'KASRATAN': '\u064D',   // ٍ (তানউইন 'ইন')
  };

static const Map<String, String> alefVariants = { 'ALEF_STANDARD': 'ا', // ا 'ALEF_WITH_MADDA': 'آ', // آ (বিস্তৃত) 'ALEF_WITH_HAMZA_ABOVE': 'أ', // أ 'ALEF_WITH_HAMZA_BELOW': 'إ', // إ 'ALEF_WASLA': 'ٰ', // ٰ (সংযুক্ত আলেফ) };

static const Map<String, String> hamzaVariants = { 'HAMZA_ISOLATED': 'ء', // একাকী হামজা 'HAMZA_ON_WAW': 'ؤ', // ওয়াও-এর উপর হামজা 'HAMZA_ON_YEH': 'ئ', // ইয়েহ-এর উপর হামজা }; }

কুরআনিক তাশকীল ও উসমানী বিরতি

Thurayya-র জন্য আমরা কুরআনিক অনন্য চিহ্নগুলোর সমর্থন করি:

static const Map<String, String> quranicMarks = {
  'STOP_FULL': 'ۖ',         // পূর্ণবিরতি (‖)
  'STOP_HALF': 'ۗ',         // অর্ধবিরতি
  'STOP_QUA': 'ۙ',          // ক্বা বিরতি
  'STOP_NECESSARY': 'ۚ',     // অপরিহার্য বিরতি
  'TAJWEED_ELONGATION': '۝', // দীর্ঘায়ন সূচক
};

ডায়াক্রিটিক সচেতন স্পিচ রিকগনিশন

ডায়াক্রিটিক সহ প্রসঙ্গ ভিত্তিক

যখন শিশু "كَتَبَ" (সে লিখেছে, অতীত কাল) শেখে, আমরা স্পিচ রিকগনিশনকে সেই সঠিক উচ্চারণের প্রতি প্রবণ করি:

# src/services/stt_client.py
def recognize_with_diacritical_context(audio_bytes, expected_text):
    # expected_text = "كَتَبَ" (ডায়াক্রিটিক সহ)
# স্পিচ প্রসঙ্গ সেট করুন
speech_context = {
    'phrases': [expected_text],
    'boost': 20.0  # প্রত্যাশিত বাক্যের জন্য উচ্চ প্রবণতা
}

# গুগল ক্লাউড স্টিটিতে প্রেরণ
response = google_stt_client.recognize(
    audio=audio_bytes,
    language_code='ar-SA',
    speech_contexts=[speech_context]
)

# ফলাফল: গুগল স্টিটি "kataba" উচ্চারণে প্রবণ
return response

ডায়াক্রিটিক সচেতন সাদৃশ্য স্কোরিং

def compare_pronunciations(expected, actual):
    """
    expected: "كَتَبَ" (ডায়াক্রিটিক সহ)
    actual: "كتب" (শিশুর চেষ্টা, সম্ভবত ডায়াক্রিটিক ছাড়া)
    """
# প্রাথমিক মিলের জন্য ডায়াক্রিটিক সরান
expected_base = strip_diacritics(expected)  # "كتب"
actual_base = strip_diacritics(actual)      # "كتب"

# ডায়াক্রিটিক ছাড়া মিল
base_similarity = string_similarity(expected_base, actual_base)  # 1.0 (পরিপূর্ন)

# ডায়াক্রিটিক বোনাস (যদি শিশু ডায়াক্রিটিক দেয়)
diacritic_bonus = 0.0
if has_diacritics(actual):
    diacritic_accuracy = diacritics_match_ratio(expected, actual)
    diacritic_bonus = diacritic_accuracy * 0.15  # সঠিক ডায়াক্রিটিকের জন্য সর্বোচ্চ +১৫%

# চূড়ান্ত স্কোর
final_score = min(base_similarity + diacritic_bonus, 1.0)

return {
    'base_score': base_similarity,
    'diacritic_bonus': diacritic_bonus,
    'final_score': final_score,
    'feedback': 'দারুণ! উচ্চারণ নিখুঁত। এবার ডায়াক্রিটিক চিহ্নের চর্চা করুন।'
}

এখানে অর্থ:

  • শিশু "كتب" (ডায়াক্রিটিক ছাড়া) বললে → ৮৫-৯০% স্কোর (সঠিক বেস, ডায়াক্রিটিক নেই)
  • শিশু "كَتَبَ" (সম্পূর্ণ ডায়াক্রিটিক সহ) বললে → ৯৮%+ স্কোর (পরিপূর্ণ)

ধাপ পরিষ্কার: প্রথমে বেস উচ্চারণে দক্ষ হোন, পরে ডায়াক্রিটিক সূক্ষ্মতা যোগ করুন।

ডান থেকে বাম (RTL) রেন্ডারিং চ্যালেঞ্জ

টেক্সট দিক নির্দেশনা নিয়ন্ত্রণ

// lib/src/screens/lesson_screen.dart
Column(
  children: [
    Directionality(
      textDirection: TextDirection.rtl,  // আরবি টেক্সটের জন্য
      child: Text(
        'كَتَبَ',
        textAlign: TextAlign.right,      // ডানদিকে সংরক্ষণ
        style: TextStyle(
          fontFamily: 'IBMPlexSansArabic',
          fontSize: 36,
          height: 1.8,  // ডায়াক্রিটিকের জন্য অতিরিক্ত উচ্চতা
        ),
      ),
    ),
    // নিচে ইংরেজি নির্দেশনা
    Directionality(
      textDirection: TextDirection.ltr,  // ইংরেজির জন্য
      child: Text(
        'Pronounce: "he wrote"',
        textAlign: TextAlign.left,       // বামদিকে সংরক্ষণ
      ),
    ),
  ],
)

সংযুক্ত বর্ণের রূপ পরিবর্তন

আরবি বর্ণ অবস্থান অনুযায়ী রূপ নেয়:

  • একাকী: "ك" (কাফ)
  • আরম্ভিক: "كَـــ" (শব্দের শুরুতে কাফ)
  • মধ্যবর্তী: "ـــكَـــ" (মাঝখানে কাফ)
  • শেষ: "ـــكَ" (শেষে কাফ)

IBMPlexSansArabic ফন্ট স্বয়ংক্রিয়ভাবে এটি পরিচালনা করে তবে সঠিক ইউনিকোড সিকোয়েন্স দরকার:

// সঠিক: ইউনিকোড যুক্তকারী চরিত্র ব্যবহার করে
String word = 'ك' + '\u0640' + 'ت' + '\u0640' + 'ب';  // কাষীদা (এক্সটেনশন)

// ভুল: সরাসরি সংযোজন String word = 'ك' + 'ت' + 'ب'; // সব ডিভাইসে সঠিক না হতে পারে

দ্বিমুখী লেখা মিশ্রণ

ইংরেজি ও আরবি একসাথে থাকলে:

RichText(
  textDirection: TextDirection.rtl,  // সামগ্রিক RTL
  text: TextSpan(
    children: [
      TextSpan(text: 'means ', style: englishStyle),  // LTR
      TextSpan(text: 'كتاب', style: arabicStyle),    // RTL
      TextSpan(text: ' (book)', style: englishStyle), // LTR
    ],
  ),
)

ফলাফল: "means كتاب (book)" সঠিক দ্বিমুখী প্রবাহ সহ প্রদর্শিত হবে।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

প্র: কেন শুরুকারীদের ডায়াক্রিটিক বাধ্যতামূলক? এটা কি কঠিন করে না?
উ: প্রাথমিকভাবে, হ্যাঁ। তবে ডায়াক্রিটিক সহ শেখার ফলে বর্ণ-শব্দ সম্পর্ক শক্তিশালী হয়। গবেষণায় দেখা গেছে ডায়াক্রিটিক শেখা দ্রুত সাবলীলতা আনে। একবার দক্ষতা আসলে ডায়াক্রিটিক ছাড়া পড়া স্বাভাবিক প্রগতি।

প্র: আমার শিশুর কীবোর্ডে ডায়াক্রিটিক টাইপিং সমর্থিত না হলে কী হবে?
উ: অ্যাপ কখনো শিশুকে ডায়াক্রিটিক টাইপ করতে বলে না। স্বীকৃতি ও উচ্চারণ speech-based। কেবল প্রাপ্তবয়স্ক (শিক্ষক, বিষয়বস্তু নির্মাতা) ডায়াক্রিটিক ইনপুট করেন এবং তারা বিশেষ আরবি কীবোর্ড ব্যবহার করেন।

প্র: Amal কি অ-প্রমিত ডায়াক্রিটিক কম্বিনেশন সমর্থন করে?
উ: আমরা সব ইউনিকোড-স্ট্যান্ডার্ড কম্বিনেশন সমর্থন করি। বিরল বা কাস্টম কম্বিনেশন সঠিক রেন্ডার নাও হতে পারে, কিন্তু মানক কুরআনিক ও আধুনিক আরবি পূর্ণ সমর্থিত।

শেয়ারTwitterLinkedInWhatsApp

সম্পর্কিত নিবন্ধ