import re
def metni_temizle_ve_esitle(metin):
"""
Harekeleri temizler. Tüm hemzeli harflerin (أ, إ, آ, ئ, ؤ) sadece hemzesini
kaldırarak yalın taban harflerini (ا, ي, و) korur. Müstakil hemzeyi (ء) siler.
"""
# 1. Harekeleri, şeddeleri ve Kuran durak işaretlerini kaldır
harekeler = re.compile(r'[\u064B-\u065F\u0670\u06D6-\u06ED]')
temiz = harekeler.sub('', metin)
# 2. Noktalama işaretlerini ve sayıları kaldır
temiz = re.sub(r'[^\w\s\u0621-\u064A]', '', temiz)
temiz = re.sub(r'[\d\u0660-\u0669]', '', temiz)
# 3. KAPSAMLI HARF DÖNÜŞÜMLERİ VE HEMZE AYRIŞTIRMASI
# Lamelif birleşimlerini aç (İçindeki gizli Elifleri yakalamak için)
temiz = re.sub(r'لآ', 'لا', temiz)
temiz = re.sub(r'لأ', 'لا', temiz)
temiz = re.sub(r'لإ', 'لا', temiz)
# 👉 DÜZENLEME: Hemzeli Elifleri yalın Elif (ا) yap
temiz = re.sub(r'[أإآ]', 'ا', temiz)
# 👉 DÜZENLEME: Kürsülü hemzeyi yalın Ye (ي) yap (Hemzesi atılmış oldu)
temiz = re.sub(r'ئ', 'ي', temiz)
# 👉 DÜZENLEME: Vavlı hemzeyi yalın Vav (و) yap (Hemzesi atılmış oldu)
temiz = re.sub(r'ؤ', 'و', temiz)
# 👉 DÜZENLEME: Altında taban harfi olmayan müstakil hemzeyi (ء) tamamen sil
temiz = re.sub(r'ء', '', temiz)
# Noktasız ye (ى) harfini standart Ye (ي) yap
temiz = re.sub(r'ى', 'ي', temiz)
# Ta Marbuta (ة) harfini He (ه) yap (Ebced değeri 5'tir)
temiz = re.sub(r'ة', 'ه', temiz)
# 4. Çift boşlukları temizle
temiz = ' '.join(temiz.split())
return temiz
def hurufi_mukattaa_ebced_hesapla(ham_metin):
temiz_metin = metni_temizle_ve_esitle(ham_metin)
if not temiz_metin:
print("❌ Hata: Temizleme sonrasında analiz edilecek harf bulunamadı!")
return
# 14 HURÛF-I MUKATTA'A HARFLERİ
mukattaa_harfleri = {'ا', 'ح', 'ر', 'س', 'ص', 'ط', 'ع', 'ق', 'ك', 'ل', 'م', 'ن', 'ه', 'ي'}
# STANDART EBCED TABLOSU
tam_ebced_sozluk = {
'ا': 1, 'ب': 2, 'ج': 3, 'د': 4, 'ه': 5, 'و': 6, 'ز': 7, 'ح': 8, 'ط': 9, 'ي': 10,
'ك': 20, 'ل': 30, 'م': 40, 'ن': 50, 'س': 60, 'ع': 70, 'ف': 80, 'ص': 90, 'ق': 100,
'ر': 200, 'sh': 300, 'ت': 400, 'ث': 500, 'خ': 600, 'ذ': 700, 'ض': 800, 'ظ': 900, 'غ': 1000
}
# GENEL METİN İÇİN MUKATTA ANALİZİ
bulunan_harfler = {}
toplam_mukatta_ebced = 0
toplam_mukatta_harf_sayisi = 0
for harf in temiz_metin:
if harf in mukattaa_harfleri:
bulunan_harfler[harf] = bulunan_harfler.get(harf, 0) + 1
toplam_mukatta_harf_sayisi += 1
toplam_mukatta_ebced += tam_ebced_sozluk[harf]
# VERİ ANALİZİ VE HAZIRLIK
kelimeler = [k for k in temiz_metin.split() if k.strip()]
kelime_detaylari = []
genel_harf_sirasi = 1
kumulatif_harf_sayisi = 0
kumulatif_ebced_degeri = 0
for sira, kelime in enumerate(kelimeler, start=1):
k_harfler = [h for h in kelime if h in tam_ebced_sozluk]
k_harf_sayisi = len(k_harfler)
k_ebced_toplam = sum(tam_ebced_sozluk[h] for h in k_harfler)
kumulatif_harf_sayisi += k_harf_sayisi
kumulatif_ebced_degeri += k_ebced_toplam
harf_listesi = []
for k_harf_sira, harf in enumerate(k_harfler, start=1):
val = tam_ebced_sozluk[harf]
harf_listesi.append({
'harf': harf,
'deger': val,
'kelime_ici_sira': k_harf_sira,
'genel_sira': genel_harf_sirasi
})
genel_harf_sirasi += 1
kelime_detaylari.append({
'sira': sira,
'harf_sayisi': k_harf_sayisi,
'ebced_toplam': k_ebced_toplam,
'kumulatif_harf': kumulatif_harf_sayisi,
'kumulatif_ebced': kumulatif_ebced_degeri,
'harfler': harf_listesi
})
# 10 ÖZEL MADDENİN OLUŞTURULMASI
str_m1, str_m2, str_m3, str_m4, str_m5 = "", "", "", "", ""
str_m6, str_m7, str_m8, str_m9, str_m10 = "", "", "", "", ""
for k in kelime_detaylari:
str_m1 += f"{k['sira']}{k['harf_sayisi']}"
str_m2 += f"{k['sira']}{k['ebced_toplam']}"
str_m4 += f"{k['sira']}{k['kumulatif_harf']}"
str_m5 += f"{k['sira']}{k['kumulatif_ebced']}"
str_m7 += f"{k['sira']}{k['ebced_toplam'] + k['harf_sayisi']}"
for k in kelime_detaylari:
str_m3 += f"{k['sira']}"
for h in k['harfler']:
str_m3 += f"{h['deger']}"
str_m6 += f"{k['sira']}"
for h in k['harfler']:
str_m6 += f"{h['kelime_ici_sira']}{h['deger']}"
for k in kelime_detaylari:
for h in k['harfler']:
str_m8 += f"{h['deger']}{h['genel_sira']}"
str_m9 += f"{h['deger']}{h['genel_sira']}"
str_m9 += f"{k['sira']}"
for k in kelime_detaylari:
for h in k['harfler']:
str_m10 += f"{h['deger']}{h['genel_sira']}"
str_m10 += f"{k['ebced_toplam']}"
def int_yap(s):
s_clean = ''.join(s.split())
return int(s_clean) if s_clean else 0
maddeler = {
"Madde 1: [Kelime Sırası + Harf Sayısı]": int_yap(str_m1),
"Madde 2: [Kelime Sırası + Kelime Ebced Toplamı]": int_yap(str_m2),
"Madde 3: [Kelime Sırası + Her Harfin Ayrı Ayrı Ebced Değerleri]": int_yap(str_m3),
"Madde 4: [Kelime Sırası + O Kelimeye Kadarki Kümülatif Harf Sayısı]": int_yap(str_m4),
"Madde 5: [Kelime Sırası + O Kelimeye Kadarki Kümülatif Ebced Toplamı]": int_yap(str_m5),
"Madde 6: [Kelime Sırası + Her Harfin Kelime İçi Sırası + Harf Ebcedi]": int_yap(str_m6),
"Madde 7: [Kelime Sırası + (Kelime Ebcedi + Harf Sayısı Toplamı)]": int_yap(str_m7),
"Madde 8: [Her Harfin Ebced Değeri + Değişken Genel Harf Sırası]": int_yap(str_m8),
"Madde 9: [Her Harfin Ebcedi + Değişken Genel Harf Sırası + Kelime Numarası]": int_yap(str_m9),
"Madde 10: [Her Harfin Ebcedi + Değişken Genel Harf Sırası + Kelime Ebced Toplamı]": int_yap(str_m10)
}
print("\n" + "="*60)
print("--- 1-2: ORİJİNAL GENEL MUKATTA KONTROLLERİ ---")
print(f"Orijinal Girdi: {ham_metin}")
print(f"Dönüştürülmüş Yalın Metin: {temiz_metin}\n")
print("Harf Sayım Detayları:")
for h_adi, sayisi in bulunan_harfler.items():
print(f" Harf: '{h_adi}' -> {sayisi} adet bulundu.")
print(f"\n👉 Toplam Mukatta Harf Sayısı: {toplam_mukatta_harf_sayisi}")
print(f"👉 Toplam Mukatta Ebced Değeri: {toplam_mukatta_ebced}")
print("\n" + "-"*30)
if toplam_mukatta_ebced % 19 == 0 and toplam_mukatta_ebced > 0:
print(f"🎯 MUKATTA EBCED TOPLAMI ({toplam_mukatta_ebced}) 19'un TAM katıdır!")
else:
print(f"❌ MUKATTA EBCED TOPLAMI ({toplam_mukatta_ebced}) 19'un katı değildir. (Kalan: {toplam_mukatta_ebced % 19})")
if toplam_mukatta_harf_sayisi % 19 == 0 and toplam_mukatta_harf_sayisi > 0:
print(f"🎯 TOPLAM MUKATTA HARF SAYISI ({toplam_mukatta_harf_sayisi}) 19'un TAM katıdır!")
else:
print(f"❌ TOPLAM MUKATTA HARF SAYISI ({toplam_mukatta_harf_sayisi}) 19'un katı değildir. (Kalan: {toplam_mukatta_harf_sayisi % 19})")
print("="*60)
print("--- KELİME VE HARF YAPISINA GÖRE 10 ADET DİNAMİK MATEMATİKSEL KONTROL ---")
for baslik, sayi in maddeler.items():
print(f"\n🔹 {baslik}")
sayi_str = str(sayi)
gosterim = sayi_str if len(sayi_str) <= 65 else f"{sayi_str[:65]}... ({len(sayi_str)} basamaklı)"
print(f"Oluşan Sayı: {gosterim}")
if sayi > 0 and sayi % 19 == 0:
print(f" 🎯 MUCİZE: 19'un TAM katıdır! (19 x {sayi // 19})")
else:
kalan = sayi % 19 if sayi > 0 else 0
print(f" ❌ DURUM: 19'un katı değildir. (Kalan: {kalan})")
print("="*60)
# ==================== KULLANICI GİRİŞ ALANI ====================
girilen_metin = input("Lütfen analiz etmek istediğiniz Arapça metni buraya yapıştırın: ")
if girilen_metin.strip():
hurufi_mukattaa_ebced_hesapla(girilen_metin)
else:
print("Boş metin girdiniz.")