import re
def harfi_standardize_et(metin):
if not metin:
return ""
# 1. Aşama: Harekeleri ve özel sembolleri temizle
harekeler = re.compile(r'[\u064B-\u065F\u0670\u06D6-\u06ED]')
temiz = harekeler.sub('', metin)
temiz = re.sub(r'[\u00A0\u2000-\u200A\u202F\u205F\u3000]', ' ', temiz)
temiz = re.sub(r'[\d\u0660-\u0669]', '', temiz)
temiz = re.sub(r'ء', '', temiz)
temiz = re.sub(r'[a-zA-Z]', '', temiz)
# 2. Aşama: Karakter Dönüşümlerini Yap
donusum = {
'آ': 'ا', 'أ': 'ا', 'إ': 'ا',
'ى': 'ي',
'ؤ': 'و', 'ئ': 'ي',
'ة': 'ه'
}
temiz = "".join([donusum.get(harf, harf) for harf in temiz])
# 3. Aşama: Sadece saf Arapça harfleri ve boşlukları koru
metin_filtresi = re.compile(r'[^\s\u0621-\u064A]')
temiz = metin_filtresi.sub('', temiz)
return temiz.strip()
# Ortak Alfabe Tanımları
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
}
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
}
# Orijinal listedeki Mod 7 filtresi harfleri
IZIN_VERILEN_14_HARF = {'د', 'ذ', 'ر', 'ز', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق'}
# Gerçek Hurûf-u Mukatta Harf Kümesi
GERCEK_MUKATTA_HARFLERI = {'ا', 'ح', 'ر', 'س', 'ص', 'ط', 'ع', 'ق', 'ك', 'ل', 'م', 'ن', 'ه', 'ي'}
def guvenli_mod_hesapla(sayi_str, mod_degeri):
"""Çok büyük basamaklı sayı dize (string) verilerinin çökme ve yavaşlama olmadan modunu alır."""
kalan = 0
for rakam in sayi_str:
kalan = (kalan * 10 + int(rakam)) % mod_degeri
return kalan
def kontrol_19_sistemi(harfleri_hazir_kelimeler, mod="standart"):
aktif_sozluk = EBCED_ALFABE if mod == "ebced" else STANDART_ALFABE
sayi_gruplari = []
for kelime in harfleri_hazir_kelimeler:
harf_sayilari = [str(aktif_sozluk[harf]) for harf in kelime if harf in aktif_sozluk]
if harf_sayilari:
sayi_gruplari.append("".join(harf_sayilari))
olusan_sayi_str = "19".join(sayi_gruplari)
if not olusan_sayi_str:
return None, 0, False
kalan = guvenli_mod_hesapla(olusan_sayi_str, 19)
return olusan_sayi_str, kalan, (kalan == 0)
# ---- HIZLI SORGULAMA PANELİ ----
print("="*75)
print(" ARAPÇA METİN ÖZELLEŞTİRİLMİŞ ANALİZ PANELİ ")
print("="*75)
while True:
print("\nLütfen Arapça metni girin/yapıştırın (Çıkmak için 'q' yazın):")
ana_metin = input("> ").strip()
if ana_metin.lower() in ['q', 'quit', 'çıkış', 'cikis']:
print("Sorgu paneli kapatıldı. İyi çalışmalar!")
break
if not ana_metin:
continue
# Kelimeleri ayır ve standardize et
kelimeler = [k for k in ana_metin.split() if k]
standardize_kelimeler = [harfi_standardize_et(k) for k in kelimeler if harfi_standardize_et(k)]
if not standardize_kelimeler:
print("Hata: Metinde geçerli Arapça harf bulunamadı!")
continue
print("\n" + "-"*50)
print(f"Tespit Edilen Kelime Sayısı: {len(standardize_kelimeler)}")
print("-"*50)
# 1. Standart Mod 19 Kontrolü
s19_str, s19_kalan, s19_onay = kontrol_19_sistemi(standardize_kelimeler, "standart")
s_durum = "✅ TAM BÖLÜNÜYOR (MUCİZE!)" if s19_onay else f"❌ Bölünmüyor (Kalan: {s19_kalan})"
print(f"▶️ HER HARFİN ALFABE SIRASI KELİME ARASI 19 İLE OLUŞAN SAYI MOD 19:")
print(f" Oluşan Sayı: {s19_str}")
print(f" Durum : {s_durum}")
print("-"*50)
# 2. Ebced Mod 19 Kontrolü
e19_str, e19_kalan, e19_onay = kontrol_19_sistemi(standardize_kelimeler, "ebced")
e_durum = "✅ TAM BÖLÜNÜYOR (MUCİZE!)" if e19_onay else f"❌ Bölünmüyor (Kalan: {e19_kalan})"
print(f"▶️ HER HARFİN EBCED DEĞERİ KELİME ARASI 19 İLE OLUŞAN SAYI MOD 19:")
print(f" Oluşan Sayı: {e19_str}")
print(f" Durum : {e_durum}")
print("-"*50)
# 3. Kalan Harfler Yan Yana Mod 7 Hesaplamaları
kalan_alfabe_list = []
kalan_ebced_list = []
# Mukatta ve Toplam Saf Harf Sayacı Değişkenleri
mukatta_ebced_toplami = 0
mukatta_harf_sayisi = 0
toplam_saf_harf_sayisi = 0
for kelime in standardize_kelimeler:
for harf in kelime:
if harf in STANDART_ALFABE:
toplam_saf_harf_sayisi += 1 # Standardize edilmiş toplam harf sayısı
# Orijinal Mod 7 Filtresi
if harf not in IZIN_VERILEN_14_HARF:
kalan_alfabe_list.append(str(STANDART_ALFABE[harf]))
kalan_ebced_list.append(str(EBCED_ALFABE[harf]))
# Bağımsız Mukatta Analizi
if harf in GERCEK_MUKATTA_HARFLERI:
mukatta_ebced_toplami += EBCED_ALFABE[harf]
mukatta_harf_sayisi += 1
kalan_alfabe_str = "".join(kalan_alfabe_list)
kalan_ebced_str = "".join(kalan_ebced_list)
print(f"▶️ İKİLİLİLERDEN 7Lİ GRUP (14 HARF) ÇIKTIKTAN SONRA KALAN HARFLER YAN YANA MOD 7 ANALİZİ:")
# Kalan Harfler Alfabe Mod 7
if kalan_alfabe_str:
kalan_alfabe_mod7 = guvenli_mod_hesapla(kalan_alfabe_str, 7)
ka_7_durum = "✅ TAM BÖLÜNÜYOR!" if kalan_alfabe_mod7 == 0 else f"❌ Bölünmüyor (Kalan: {kalan_alfabe_mod7})"
print(f" Alfabe Sayısı: {kalan_alfabe_str}")
print(f" Alfabe Mod 7 : {ka_7_durum}")
else:
print(" Alfabe Mod 7 : Metinde kalan harf yok.")
# Kalan Harfler Ebced Mod 7
if kalan_ebced_str:
kalan_ebced_mod7 = guvenli_mod_hesapla(kalan_ebced_str, 7)
ke_7_durum = "✅ TAM BÖLÜNÜYOR!" if kalan_ebced_mod7 == 0 else f"❌ Bölünmüyor (Kalan: {kalan_ebced_mod7})"
print(f" Ebced Sayısı : {kalan_ebced_str}")
print(f" Ebced Mod 7 : {ke_7_durum}")
else:
print(" Ebced Mod 7 : Metinde kalan harf yok.")
print("-"*50)
# Hurûf-u Mukatta Bağımsız Analizi
print(f"▶️ HURÛF-U MUKATTA EBCED TOPLAM ANALİZİ (MOD 19):")
if mukatta_harf_sayisi > 0:
mukatta_mod19 = mukatta_ebced_toplami % 19
m_durum = "✅ TAM BÖLÜNÜYOR (MUCİZE!)" if mukatta_mod19 == 0 else f"❌ Bölünmüyor (Kalan: {mukatta_mod19})"
print(f" Tespit Edilen Mukatta Harf Sayısı: {mukatta_harf_sayisi}")
print(f" Toplam Mukatta Ebced Değeri : {mukatta_ebced_toplami}")
print(f" Durum : {m_durum}")
else:
print(" Metinde Hurûf-u Mukatta harfi tespit edilemedi.")
print("-"*50)
# SON KOŞUL: Toplam Harf Sayısı Kontrolü (80 Harf mi?)
print(f"▶️ STANDART HARF SAYISI KONTROLÜ (80 HARF):")
h_durum = "✅ METİN TAM 80 HARFTEN OLUŞUYOR!" if toplam_saf_harf_sayisi == 80 else f"❌ 80 Harf Değil (Mevcut Harf Sayısı: {toplam_saf_harf_sayisi})"
print(f" Durum : {h_durum}")
print("-"*50)