Skip to content

mumeyyizbuyuk/trtext

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

trtext

Türkçe metin araçları — sıfır bağımlılık.

Doğru büyük/küçük harf (İ/ı) · Slugify · Türk alfabesiyle sıralama · Ad-soyad normalizasyonu · Ünlü uyumlu ek üretimi

Turkish text utilities: correct casing, slugs, collation, name parsing and vowel-harmony suffixes.English below


Bu bug'ı yaşadınız

>>> "istanbul".upper()
'ISTANBUL'          # ✗ noktasız I — "İSTANBUL" olmalıydı
>>> "DİYARBAKIR".lower()
'di̇yarbakir'        # ✗ hayalet nokta (combining dot) + yanlış ı
>>> sorted(["çilek", "damla"])
['damla', 'çilek']  # ✗ Türk alfabesinde ç, d'den önce gelir
>>> f"Kullanıcı {sehir}'de oturuyor"
"Kullanıcı İstanbul'de oturuyor"   # ✗ "İstanbul'da" olmalıydı

Unicode'un varsayılan kuralları Türkçe'nin dört harfli i ailesini (i-İ, ı-I) bilmez; sorted() kod noktasına göre sıralar; şablonlardaki sabit ekler ünlü uyumunu kırar. trtext dördünü de düzeltir.

Kurulum

pip install trtext

Hızlı başlangıç

import trtext

# Doğru casing
trtext.upper("istanbul")        # 'İSTANBUL'
trtext.lower("DİYARBAKIR")      # 'diyarbakır'
trtext.capitalize("ışıl")       # 'Işıl'

# Slug
trtext.slugify("İç Anadolu'da 5. Gün!")   # 'ic-anadoluda-5-gun'
trtext.asciify("Çağrı ÖZTÜRK")            # 'Cagri OZTURK'

# Türk alfabesiyle sıralama
trtext.tr_sorted(["damla", "çilek", "cam"])   # ['cam', 'çilek', 'damla']
sorted(isimler, key=trtext.sort_key)          # kendi sorted()'ınızla

# Ad-soyad normalizasyonu ve unvan tespiti
trtext.normalize_name("mehmet ALİ  öztürk")   # 'Mehmet Ali Öztürk'
p = trtext.parse_name("Sayın Prof. Dr. Ayşe Kaya")
p.honorifics    # ['Sayın', 'Prof. Dr.']
p.full_name     # 'Ayşe Kaya'
trtext.parse_name("Mehmet Öztürk Bey").gender_hint   # 'erkek'
trtext.make_salutation("ayşe yılmaz hanım")          # 'Ayşe Hanım'

# Ünlü uyumlu ek üretimi — şablonların kurtarıcısı
trtext.locative("İstanbul")    # "İstanbul'da"
trtext.locative("Zonguldak")   # "Zonguldak'ta"   (ünsüz sertleşmesi)
trtext.dative("Ankara")        # "Ankara'ya"      (kaynaştırma y)
trtext.genitive("Ayşe")        # "Ayşe'nin"
trtext.accusative("Ömür")      # "Ömür'ü"
trtext.ablative("Kars")        # "Kars'tan"
trtext.conjunction("Kaan")     # "Kaan da"        (ayrı yazılan de/da)
trtext.dative("TDK")           # "TDK'ye"         (kısaltma harf okunuşu)

# Ekler apostrophe=False ile zincirlenebilir
trtext.locative(trtext.plural("araba"), apostrophe=False)   # "arabalarda"

f"Kullanıcı {trtext.locative(sehir)} oturuyor"
# "Kullanıcı İstanbul'da oturuyor" ✓

Ek üretiminin sınırları (v0.1)

Ek seçimi son ünlü + son ünsüz analiziyle yapılır; özel isimler (kişi, şehir, kurum) için tasarlanmıştır ve kesme işaretiyle yazılır (apostrophe=False ile kapatılabilir). Ünlüsüz büyük harfli kısaltmalar son harfin okunuşuyla ek alır ("TDK'ye", "THY'de"); ünlü içerenler kelime gibi okunur ("NATO'ya", "ODTÜ'ye") — "AB" gibi harf harf okunan ünlülü kısaltmalar yanlış ek alabilir. Bilinen diğer sınırlar: yumuşama uygulanmaz ("kitap→kitabı" değil — özel adlarda zaten istenmez: "Zeynep'i"), sayı okunuşları desteklenmez ("1996'da" için manuel), ince okunuşlu istisnalar küçük bir sözlükle karşılanır (saat, harf, gol, alkol, petrol, kontrol) — eksik gördüğünüz istisna için issue açın.

Kullanım alanları

CRM/form verisi temizliği (isim normalizasyonu), e-posta ve bildirim şablonları (hitap + ek üretimi), URL/SEO slug'ları, raporlarda alfabetik listeler, arama indekslerinde Türkçe-duyarsız eşleştirme (asciify + lower).

Yol haritası

  • Sayı okunuşuyla ek ("1996'da", "%5'e")
  • ile kaynaşması ("Kaan'la", "Ömür'le")
  • Deasciify (asci metni Türkçe karakterlere geri çevirme)
  • npm/TypeScript portu

Lisans

MIT


English

trtext fixes the notorious Turkish-locale text bugs in one zero-dependency package. Python's default upper()/lower() mishandle Turkish's four-way i family (i↔İ, ı↔I) and leave combining-dot residue; default sorted() ignores the Turkish alphabet; template strings with fixed suffixes violate vowel harmony.

Features: correct Turkish casing, ASCII folding and slug generation, Turkish collation (sort_key for use with sorted()), person-name normalization with honorific detection (parse_name("Sayın Prof. Dr. Ayşe Kaya")) and salutation building, and vowel-harmony suffix generationlocative("İstanbul")"İstanbul'da", with consonant hardening ("Zonguldak'ta") and buffer consonants ("Ankara'ya"), which makes grammatically correct Turkish templates possible:

f"User lives {trtext.locative(city)}"   # correct suffix for any city

License: MIT

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages