Amal عربی علامات کی پوری پیچیدگی کو ہینڈل کرتا ہے: 8 تشکيل مارکس (فتحہ، ضمہ، کسرة، شدة، سکون، فتح تان، دم تان، کسرتان)، 4 الف کی مختلف شکلیں (معیاری، مدہ، همزہ اوپر، همزہ نیچے، وصلہ)، 3 همزہ کے مختلف شکلیں (تنہا، واؤ پر، یاء پر)، اور لام الف کے ملاپ۔ ایپ کی تقریر شناختی، ٹیکسٹ رینڈرنگ، اور مشابہت کا اسکورنگ سب تشکيل شدہ عربی ("كَتَبَ") اور غیر تشکيل شدہ عربی ("كتب") کو مختلف سمجھتے ہیں — یہ ایک اہم فرق ہے جسے اکثر عربی سیکھنے والی ایپس نظرانداز کرتی ہیں۔
تشکیلات سیکھنے میں کیوں اہم ہیں؟
ابہام کا مسئلہ
بغیر تشکیلات کے عربی مبہم ہو جاتی ہے:
- "كتب" کے معانی ہو سکتے ہیں:
- "کتب" (کتب) - اسم جمع
- "کتبَ" (اس نے لکھا) - ماضی
- "کُتبَ" (لکھا گیا) - ماضی مجهول
تمام ایک ہی املا میں ہوتے ہیں جب تشکیلات نہ ہوں۔ تشکیلات ابہام کو ختم کرتی ہیں۔
سیکھنے کا مرحلہ وار طریقہ
- ابتدائی: تشکیلات کے ساتھ پڑھنا سیکھیں (آسان – حرکات واضح ہوتی ہیں)
- درمیانہ: تشکیلات کے ساتھ مشق کریں یہاں تک کہ عادت بن جائے
- اعلی: آہستہ آہستہ تشکیلات کو ہٹائیں، پڑھنا مشکل ہو جاتا ہے
- ماہرت: بغیر تشکیلات کے روانی سے پڑھیں (مادری سطح)
زیادہ تر عربی سیکھنے والی ایپس مرحلہ 1 کو چھوڑ دیتی ہیں — یا تشکیلات ہی نہیں سکھاتیں، یا ہٹا دیتی ہیں۔ یہ غلط عادات سکھاتا ہے۔ 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):
# متوقع متن = "كَتَبَ" (تشکيل کے ساتھ)
# تقریر سیاق کا اشارہ بنائیں
speech_context = {
'phrases': [expected_text],
'boost': 20.0 # متوقع متن کے لیے زیادہ زور
}
# گوگل کلاؤڈ STT کو بھیجیں
response = google_stt_client.recognize(
audio=audio_bytes,
language_code='ar-SA',
speech_contexts=[speech_context]
)
# نتیجہ: گوگل STT "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 # درست تشکیلات پر +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 غیر معیاری تشکیلی مرکبات کو سپورٹ کرتا ہے؟
ج: ہم تمام یونی کوڈ معیاری مرکبات کی حمایت کرتے ہیں۔ نایاب یا حسب ضرورت مرکبات شاید صحیح ظاہر نہ ہوں، مگر معیاری قرآنی اور جدید عربی مکمل طور پر معاون ہیں۔



