अरबी टास्की़ल सही ढंग से सीखें: Amal में तश्कील, शद्दा और हम्ज़ा
6 मिनट पढ़ेंMohammad Shaker

अरबी टास्की़ल सही ढंग से सीखें: Amal में तश्कील, शद्दा और हम्ज़ा

Amal ऐप अरबी तश्कील के 8 निशान, 4 अलिफ़ वेरिएंट, 3 हम्ज़ा और लैम-अलिफ़ लिगेचर्स को सही तरीके से संभालता है।

Engineering

त्वरित उत्तर

Amal ऐप अरबी तश्कील के 8 निशान, 4 अलिफ़ वेरिएंट, 3 हम्ज़ा और लैम-अलिफ़ लिगेचर्स को सही तरीके से संभालता है।

अरबी टास्की़ल सही ढंग से सीखें: Amal में तश्कील, शद्दा और हम्ज़ा कैसे संभाले जाते हैं

Amal अरबी टास्की़ल की पूरी जटिलता को संभालता है: 8 तश्कील मार्क्स (फत्हा, डम्मा, कसर, शद्दा, सुकून, फतमतन, डम्मतन, कसरतन), 4 अलिफ़ वेरिएंट्स (मानक, मड्डा, हम्ज़ा ऊपर, हम्ज़ा नीचे, वस्ला), 3 हम्ज़ा वेरिएंट्स (अलग, वाव पर, याह पर), और लैम-अलिफ़ लिगेचर्स। ऐप की स्पीच रिकग्निशन, टेक्स्ट रेंडरिंग और सिमिलैरिटी स्कोरिंग तश्कील के साथ अरबी ("كَتَبَ") को बिना तश्कील वाले अरबी ("كتب") से अलग तरीके से संभालती है — जो अधिकतर अरबी शिक्षण ऐप्स नजरअंदाज करते हैं।

सीखने में टास्की़ल क्यों महत्वपूर्ण हैं

संदिग्धता की समस्या

  • बिना तश्कील के अरबी अस्पष्ट होती है:
  • "كتب" का मतलब हो सकता है:
    • "कतबा" (उसने लिखा) — भूतकाल
    • "कुतुब" (किताबें) — बहुवचन संज्ञा
    • "कुतिबा" (यह लिखा गया था) — कर्मवाच्य
  • सभी बिना तश्कील के समान लिखे जाते हैं। तश्कील संदेह दूर करते हैं।

सीखने का क्रम

  1. शुरुआती: तश्कील के साथ पढ़ना सीखें (आसान — स्वर चिह्नित होते हैं)
  2. मध्यम: तश्कील के साथ अभ्यास करें जब तक स्वतः न हो जाए
  3. उन्नत: धीरे-धीरे तश्कील हटाएं, पढ़ना कठिन होता है
  4. प्रवीण: तश्कील के बिना प्रवाहित रूप में पढ़ें (मूल भाषा जैसा)

अधिकतर अरबी शिक्षण ऐप्स पहला चरण छोड़ देते हैं — वे तश्कील नहीं सिखाते या निकाल देते हैं, जो गलत आदतें बनाती हैं। Amal का क्रम वैज्ञानिक रूप से सही है।

हमारा यूनिकोड-स्तरीय कार्यान्वयन

टास्की़ल मार्क्स (कुल 8)

// lib/src/utils/arabic_extension.dart
class ArabicExtension {
  static const Map<String, String> tashkeelMarks = {
    'FATHA': '\u064E',      // َ (स्वर 'a')
    'DAMMA': '\u064F',      // ُ (स्वर 'u')
    'KASRA': '\u0650',      // ِ (स्वर 'i')
    'SUKUN': '\u0652',      // ْ (कोई स्वर नहीं)
    'SHADDA': '\u0651',     // ّ (दोहराया अक्षर)
    'FATHATAN': '\u064B',   // ً (तनवीन 'an')
    'DAMMATAN': '\u064C',   // ٌ (तनवीन 'un')
    'KASRATAN': '\u064D',   // ٍ (तनवीन 'in')
  };

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  # अपेक्षित टेक्स्ट के लिए उच्च बूस्ट
}

# Google Cloud STT को भेजें
response = google_stt_client.recognize(
    audio=audio_bytes,
    language_code='ar-SA',
    speech_contexts=[speech_context]
)

# परिणाम: Google STT "कतबा" उच्चारण की ओर झुका होता है
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  # सही तश्कील पर +15% तक

# अंतिम स्कोर
final_score = min(base_similarity + diacritic_bonus, 1.0)

return {
    'base_score': base_similarity,
    'diacritic_bonus': diacritic_bonus,
    'final_score': final_score,
    'feedback': 'बहुत बढ़िया! उच्चारण एकदम सही है। अब तश्कील के चिह्नों का अभ्यास करें।'
}

अर्थात्:

  • बच्चा "كتب" (बिना तश्कील) बोले → 85-90% स्कोर (सही आधार, तश्कील छूटे हुए)
  • बच्चा "كَتَبَ" (पूरी तश्कील सहित) बोले → 98%+ स्कोर (परिपूर्ण)
  • क्रम स्पष्ट है: पहले आधार उच्चारण मास्टर करें, फिर टास्की़ल की सूक्ष्मता जोड़ें।

आरटीएल रेंडरिंग चुनौतियां

टेक्स्ट दिशा प्रबंधन

// 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,  // संपूर्ण आरटीएल
  text: TextSpan(
    children: [
      TextSpan(text: 'means ', style: englishStyle),  // एलटीआर
      TextSpan(text: 'كتاب', style: arabicStyle),    // आरटीएल
      TextSpan(text: ' (book)', style: englishStyle), // एलटीआर
    ],
  ),
)

परिणाम: "means كتاب (book)" सही दो-तरफ़ा प्रवाह के साथ दिखता है।

अक्सर पूछे जाने वाले प्रश्न

प्रश्न: शुरुआती सीखने वालों पर तश्कील क्यों ज़ोर दिया जाता है? क्या इससे सीखना कठिन नहीं हो जाता?
उत्तर: शुरू में थोड़ा कठिन हो सकता है, लेकिन तश्कील के साथ सीखने से अक्षरों की ध्वन्यात्मक पहचान मजबूत होती है। शोध दिखाता है कि तश्कील के साथ सीखना तेज़ प्रवाह लाता है। तश्कील के साथ महारत हासिल करने के बाद बिना तश्कील के पढ़ना स्वाभाविक होता है।

प्रश्न: अगर मेरे बच्चे का कीबोर्ड तश्कील टाइप नहीं कर पाता तो?
उत्तर: ऐप बच्चों से तश्कील टाइप करने को नहीं कहता। पहचान और उच्चारण आवाज़ आधारित है। केवल शिक्षक और कंटेंट क्रिएटर तश्कील इनपुट करते हैं, वे विशेष अरबी कीबोर्ड का उपयोग करते हैं।

प्रश्न: क्या Amal गैर-मानक तश्कील संयोजनों का समर्थन करता है?
उत्तर: हम सभी यूनिकोड-मानकीकृत संयोजनों का समर्थन करते हैं। दुर्लभ या कस्टम संयोजन सही ढंग से नहीं दिख सकते, लेकिन मानक क़ुरानी और आधुनिक अरबी पूर्ण रूप से समर्थित हैं।

साझा करेंTwitterLinkedInWhatsApp

संबंधित लेख