import re
def metni_temizle_ve_esitle(metin):
"""
Harekeleri temizler, tüm gizli boşluk varyasyonlarını standartlaştırır.
Hemzeleri uçurur, altlarındaki kürsü harflerini korur. Yalın hemzeyi (ء) siler.
Lamelif (لا) geleneksel olarak 2 ayrı harf (Lam ve Elif) olarak işlenir.
"""
if not metin:
return ""
# 1. Standart olmayan tüm Unicode boşlukları (No-break space vb.) normal boşluğa çevir
temiz = re.sub(r'[\u00A0\u2000-\u200A\u202F\u205F\u3000]', ' ', metin)
# 2. Harekeleri, şeddeleri ve Kuran durak işaretlerini kaldır
harekeler = re.compile(r'[\u064B-\u065F\u0670\u06D6-\u06ED]')
temiz = harekeler.sub('', temiz)
# 3. ÖNCE Arapça Hint rakamlarını ve standart rakamları temizle
temiz = re.sub(r'[\d\u0660-\u0669]', '', temiz)
# 4. Yalın hemzeyi (ء) tamamen kaldır (Altında kürsü olmadığı için yok olur)
temiz = re.sub(r'ء', '', temiz)
# 5. Noktalama işaretlerini ve diğer yabancı karakterleri kaldır
temiz = re.sub(r'[^\w\s\u0621-\u064A]', '', temiz)
def arapca_metni_sayiya_cevir(metin, secenek=19, mod="standart"):
# 1. Değer Haritaları
standart_alfabe = {
'ا': 1, 'ب': 2, 'ت': 3, 'ث': 4, 'ج': 5, 'ح': 6, 'خ': 7,
'د': 8, 'ذ': 9, 'ر': 10, 'ز': 11, 'س': 12, 'ش': 13, 'ص': 14,
'ض': 15, 'ط': 16, 'ظ': 17, 'ع': 18, 'غ': 19, 'ف': 20, 'ق': 21,
'ك': 22, 'ل': 23, 'م': 24, 'ن': 25, 'ه': 26, 'و': 27, 'ي': 28,
'آ': 1, 'أ': 1, 'إ': 1, 'ؤ': 27, 'ئ': 28, 'ء': 1, 'ة': 26, 'ى': 28
}
ebced_alfabe = {
'ا': 1, 'ب': 2, 'ج': 3, 'د': 4, 'ه': 5, 'و': 6, 'ز': 7, 'ح': 8, 'ط': 9,
'ي': 10, 'ك': 20, 'ل': 30, 'م': 40, 'ن': 50, 'س': 60, 'ع': 70, 'ف': 80, 'ص': 90,
'ق': 100, 'ر': 200, 'ش': 300, 'ت': 400, 'ث': 500, 'خ': 600, 'ذ': 700, 'ض': 800, 'ظ': 900, 'غ': 1000,
'آ': 1, 'أ': 1, 'إ': 1, 'ؤ': 6, 'ئ': 10, 'ء': 1, 'ة': 5, 'ى': 10
}
harf_havuzu = set(standart_alfabe.keys()).union({' '})
harekesiz_metin = "".join([k for k in metin if k in harf_havuzu])
harekesiz_metin = re.sub(r'\s+', ' ', harekesiz_metin).strip()
kelimeler = harekesiz_metin.split(' ')
sayi_gruplari = []
detaylar = []
for kelime in kelimeler:
harf_sayilari = []
harf_gosterimi = []
if mod == "lamelif" and 'ل' in kelime and 'ا' in kelime:
i = 0
while i < len(kelime):
if i < len(kelime) - 1 and kelime[i] == 'ل' and kelime[i+1] == 'ا':
harf_sayilari.append("31")
harf_gosterimi.append("لا(31)")
i += 2
else:
harf = kelime[i]
if harf in standart_alfabe:
sira = standart_alfabe[harf]
harf_sayilari.append(str(sira))
harf_gosterimi.append(f"{harf}({sira})")
i += 1
else:
aktif_sozluk = ebced_alfabe if mod == "ebced" else standart_alfabe
for harf in kelime:
if harf in aktif_sozluk:
deger = aktif_sozluk[harf]
harf_sayilari.append(str(deger))
harf_gosterimi.append(f"{harf}({deger})")
if harf_sayilari:
kelime_sayisi = "".join(harf_sayilari)
sayi_gruplari.append(kelime_sayisi)
detaylar.append(f"{kelime} -> {' + '.join(harf_gosterimi)} -> {kelime_sayisi}")
baglac = str(secenek)
olusan_sayi_str = baglac.join(sayi_gruplari)
if not olusan_sayi_str:
return None, None, False, harekesiz_metin, []
olusan_sayi = int(olusan_sayi_str)
kalan = olusan_sayi % 19
bolunur_mu = (kalan == 0)
return olusan_sayi_str, kalan, bolunur_mu, harekesiz_metin, detaylar
# ---- PANEL ANA DÖNGÜSÜ ----
print("="*75)
print(" ARAPÇA METİN TAM KONTROL PANELİ (Standart, Lamelif=31 ve Ebced) ")
print(" Çıkmak için 'çıkış' yazabilirsiniz. ")
print("="*75)
while True:
giris_metni = input("\nLütfen Arapça metni girin: ").strip()
if giris_metni.lower() == 'çıkış':
print("Sorgu paneli kapatıldı.")
break
if not giris_metni:
continue
# Hesaplamaları yapalım
s19_std, k19_std, r19_std, temiz_metin, d_std = arapca_metni_sayiya_cevir(giris_metni, 19, "standart")
s31_std, k31_std, r31_std, _, _ = arapca_metni_sayiya_cevir(giris_metni, 31, "standart")
s19_lam, k19_lam, r19_lam, _, d_lam = arapca_metni_sayiya_cevir(giris_metni, 19, "lamelif")
s31_lam, k31_lam, r31_lam, _, _ = arapca_metni_sayiya_cevir(giris_metni, 31, "lamelif")
s19_ebc, k19_ebc, r19_ebc, _, d_ebc = arapca_metni_sayiya_cevir(giris_metni, 19, "ebced")
s31_ebc, k31_ebc, r31_ebc, _, _ = arapca_metni_sayiya_cevir(giris_metni, 31, "ebced")
if s19_std is None:
print("Hata: Geçerli Arapça harf bulunamadı!")
continue
print("\n" + "="*75)
print(f"Harekelerden Arındırılmış Metin: {temiz_metin}")
print("="*75)
# 1. Mod: Standart
print("[1] STANDART ALFABE SIRASI (ل=23, ا=1)")
print(f" > Arası 19: {s19_std} | Kalan: {k19_std} | Bölünme: {'✅ EVET' if r19_std else '❌ HAYIR'}")
print(f" > Arası 31: {s31_std} | Kalan: {k31_std} | Bölünme: {'✅ EVET' if r31_std else '❌ HAYIR'}")
# 2. Mod: Lamelif
print("\n[2] LAMELİF ÖZEL DURUMU (لا=31)")
print(f" > Arası 19: {s19_lam} | Kalan: {k19_lam} | Bölünme: {'✅ EVET' if r19_lam else '❌ HAYIR'}")
print(f" > Arası 31: {s31_lam} | Kalan: {k31_lam} | Bölünme: {'✅ EVET' if r31_lam else '❌ HAYIR'}")
# 3. Mod: Ebced
print("\n[3] EBCED DEĞERİ SİSTEMİ (ب=2, س=60, م=40...)")
print(f" > Harflerin Sırasıyla Ebcedi Kelimeler Arası 19 ile oluşan sayı >>19'un katıdır.: {s19_ebc} | Kalan: {k19_ebc} | Bölünme: {'✅ EVET' if r19_ebc else '❌ HAYIR'}")
print(f" > Arası 31: {s31_ebc} | Kalan: {k31_ebc} | Bölünme: {'✅ EVET' if r31_ebc else '❌ HAYIR'}")
print("="*75)