Amal ile Arapça Noktalama İşaretleri: Tashkeel, Şedde ve Hamza
5 dk okumaMohammad Shaker

Amal ile Arapça Noktalama İşaretleri: Tashkeel, Şedde ve Hamza

Amal, Arapça noktalama işaretlerinin (tashkeel) tüm karmaşıklığını yönetir ve harf okuma uygulamalarından farklı olarak doğru değerlendirme yapar.

Engineering

Hızlı cevap

Amal, Arapça noktalama işaretlerinin (tashkeel) tüm karmaşıklığını yönetir ve harf okuma uygulamalarından farklı olarak doğru değerlendirme yapar.

Arapça Noktalama İşaretleri Doğru Kullanımı: Amal Tashkeel, Şedde ve Hamzayı Nasıl Yönetiyor?

Amal, Arapça noktalama işaretlerinin tam karmaşıklığını yönetir: 8 tashkeel işareti (fetha, damme, kesra, şedde, sukun, fehtatan, dammatan, kesratan), 4 elif çeşidi (standart, madda, hamza üstte, hamza altta, vasla), 3 hamza çeşidi (yalnız, vav üstünde, ye üstünde) ve Lam-Alef birleşimleri. Uygulamanın konuşma tanıma, metin gösterimi ve benzerlik puanlama sistemleri noktalı Arapçayı ("كَتَبَ") noktasız Arapçadan ("كتب") ayrı değerlendirir — çoğu Arapça eğitim uygulamasının göz ardı ettiği hayati bir fark.

Noktaların Öğrenmede Önemi Nedir?

Belirsizlik Sorunu

Noktalar olmadan Arapça belirsizdir:

  • "كتب" şunları ifade edebilir:
  • "kataba" (o yazdı) — geçmiş zaman
  • "kutub" (kitaplar) — çoğul isim
  • "kutiba" (yazıldı) — edilgen yapı

Tüm bu kelimeler, noktalama olmadan aynı şekilde yazılır. Noktalar, belirsizliği ortadan kaldırır.

Öğrenme Süreci

  1. Başlangıç: Noktalı okumayı öğrenmek (kolay — sesli harfler işaretlidir)
  2. Orta Seviye: Noktalı okumada otomatikleşene kadar pratik yapmak
  3. İleri: Noktaları yavaş yavaş kaldırarak okuma zorlaşır
  4. Akıcı: Noktasız okuma akıcılığı (ana dil seviyesinde)

Çoğu Arapça öğrenme uygulaması, 1. aşamayı atlar — ya noktaları hiç öğretmez ya da kaldırır. Bu yanlış alışkanlıklar kazandırır. Amal'ın öğrenme süreci bilimsel olarak doğrudur.

Unicode Seviyesinde Uygulamamız

Noktalama İşaretleri (Toplam 8)

// lib/src/utils/arabic_extension.dart
class ArabicExtension {
  static const Map<String, String> tashkeelMarks = {
    'FATHA': '\u064E',      // َ (sesli a)
    'DAMMA': '\u064F',      // ُ (sesli u)
    'KASRA': '\u0650',      // ِ (sesli i)
    'SUKUN': '\u0652',      // ْ (sessiz)
    'SHADDA': '\u0651',     // ّ (harf çiftlemesi)
    'FATHATAN': '\u064B',   // ً (tenvin an)
    'DAMMATAN': '\u064C',   // ٌ (tenvin un)
    'KASRATAN': '\u064D',   // ٍ (tenvin in)
  };

static const Map<String, String> alefVariants = { 'ALEF_STANDARD': 'ا', // ا 'ALEF_WITH_MADDA': 'آ', // آ (uzunlaştırılmış) 'ALEF_WITH_HAMZA_ABOVE': 'أ', // أ 'ALEF_WITH_HAMZA_BELOW': 'إ', // إ 'ALEF_WASLA': 'ٰ', // ٰ (bağlayıcı elif) };

static const Map<String, String> hamzaVariants = { 'HAMZA_ISOLATED': 'ء', // Yalnız hamza 'HAMZA_ON_WAW': 'ؤ', // Vav üstünde hamza 'HAMZA_ON_YEH': 'ئ', // Yeh üstünde hamza }; }

Kuran Noktalama ve Uthmani Duruş İşaretleri

Thurayya için Kuran'a özgü işaretleri destekliyoruz:

static const Map<String, String> quranicMarks = {
  'STOP_FULL': 'ۖ',         // Tam durak
  'STOP_HALF': 'ۗ',         // Yarım durak
  'STOP_QUA': 'ۙ',          // Qua durak
  'STOP_NECESSARY': 'ۚ',     // Gerekli durak
  'TAJWEED_ELONGATION': '۝', // Uzatma göstergesi
};

Noktalı Konuşma Tanıma

Noktalı Bağlam ile Ses Tanıma

Çocuk "كَتَبَ" (o yazdı, geçmiş zaman) öğrenirken, konuşma tanımayı tam olarak bu telaffuza yönlendiriyoruz:

# src/services/stt_client.py
def recognize_with_diacritical_context(audio_bytes, expected_text):
    # expected_text = "كَتَبَ" (noktalı)
speech_context = {
    'phrases': [expected_text],
    'boost': 20.0  # Beklenen metin için yüksek önyükleme
}

response = google_stt_client.recognize(
    audio=audio_bytes,
    language_code='ar-SA',
    speech_contexts=[speech_context]
)

return response

Noktalı Bilinçli Benzerlik Puanlaması

Benzerliği hesaplama, noktalı ve noktasız farklılığı gözetir:

def compare_pronunciations(expected, actual):
    """
    expected: "كَتَبَ" (noktalı)
    actual: "كتب" (çocuğun denemesi, muhtemelen noktasız)
    """
expected_base = strip_diacritics(expected)  # "كتب"
actual_base = strip_diacritics(actual)      # "كتب"

base_similarity = string_similarity(expected_base, actual_base)  # 1.0 (mükemmel)

diacritic_bonus = 0.0
if has_diacritics(actual):
    diacritic_accuracy = diacritics_match_ratio(expected, actual)
    diacritic_bonus = diacritic_accuracy * 0.15  # Doğru noktalarda +%15'e kadar

final_score = min(base_similarity + diacritic_bonus, 1.0)

return {
    'base_score': base_similarity,
    'diacritic_bonus': diacritic_bonus,
    'final_score': final_score,
    'feedback': 'Harika! Telaffuz mükemmel. Şimdi noktalama işaretlerini pratik et.'
}

Bu şu anlama gelir:

  • Çocuk "كتب" (noktasız) derse → %85-90 puan (temel doğru, noktalar eksik)
  • Çocuk "كَتَبَ" (tam noktalı) derse → %98+ puan (mükemmel)
Başlangıçta temel telaffuzu öğren, sonra noktalama inceliğini ekle.

Sağdan Sola (RTL) Metin Gösterimi Zorlukları

Metin Yönü Yönetimi

// lib/src/screens/lesson_screen.dart
Column(
  children: [
    Directionality(
      textDirection: TextDirection.rtl,  // Arapça metin için
      child: Text(
        'كَتَبَ',
        textAlign: TextAlign.right,      // Sağ hizalama
        style: TextStyle(
          fontFamily: 'IBMPlexSansArabic',
          fontSize: 36,
          height: 1.8,  // Noktalar için ekstra satır yüksekliği
        ),
      ),
    ),
    Directionality(
      textDirection: TextDirection.ltr,  // İngilizce için
      child: Text(
        'Pronounce: "he wrote"',
        textAlign: TextAlign.left,       // Sol hizalama
      ),
    ),
  ],
)

Bağlı Harf Şekil Değiştirmeleri

Arap harfleri pozisyona göre şekil değiştirir:

  • Yalıtılmış: "ك" (Kaf)
  • Başlangıç: "كَـــ" (kelime başında Kaf)
  • Orta: "ـــكَـــ" (kelime ortasında Kaf)
  • Son: "ـــكَ" (kelime sonunda Kaf)
IBMPlexSansArabic fontu otomatik şekillendirir, ancak doğru Unicode dizilerini kullanmalıyız:

// Doğru: Unicode bağlayıcı karakterler kullanılır
String word = 'ك' + '\u0640' + 'ت' + '\u0640' + 'ب';  // Kashida (uzatma)
// Yanlış: Doğrudan birleştirme
String word = 'ك' + 'ت' + 'ب';  // Tüm cihazlarda doğru şekillenmeyebilir

İki Yönlü (Bidirectional) Metin Karışımı

İngilizce ve Arapça birlikte görünürse:

RichText(
  textDirection: TextDirection.rtl,  // Genel RTL
  text: TextSpan(
    children: [
      TextSpan(text: 'means ', style: englishStyle),  // LTR
      TextSpan(text: 'كتاب', style: arabicStyle),    // RTL
      TextSpan(text: ' (book)', style: englishStyle), // LTR
    ],
  ),
)

Sonuç: "means كتاب (book)" doğru iki yönlü akışla gösterilir.

Sıkça Sorulan Sorular

S: Başlangıç seviyesindekilere neden noktalama zorunlu yapılıyor? Daha zor değil mi?

C: Başlangıçta evet zor olabilir. Ancak noktalı öğrenmek harf-ses bağını güçlendirir. Araştırmalar, noktalı öğrenmenin akıcılığı hızlandırdığını gösteriyor. Noktalar iyi öğrenildikten sonra noktasız okumaya geçmek doğal ilerlemedir.

S: Çocuğumun klavyesi noktalama yazmayı desteklemiyor, sorun olur mu?

C: Uygulama çocuklardan noktalama yazmasını istemez. Tanıma ve telaffuz konuşma aracılıdır. Yalnızca öğretmenler veya içerik üreticileri noktalama girer ve onlar özel Arapça klavyeler kullanır.

S: Amal standart dışı noktalama kombinasyonlarını destekliyor mu?

C: Tüm Unicode standart kombinasyonları desteklenir. Nadir ya da özel kombinasyonlar doğru gösterilmeyebilir ama standart Kuran ve modern Arapça tamamen desteklenmektedir.

İlgili Makaleler