turkce-vurgu
English: Turkish grapheme-to-phoneme conversion with lexical stress: text → stress-marked IPA for TTS models, without espeak and without dependencies. Handles exceptional stress (place names, loanwords, pre-stressing suffixes such as negative -mA and the question particle mI) and k/g/l palatalization, which espeak gets wrong for Turkish.
Türkçe metni, ses sentezi (TTS) modellerinin girdisi olan vurgu işaretli IPA okunuşa çevirir. espeak gerektirmez, bağımlılığı yoktur.
from turkce_vurgu import g2p
g2p("Ankara'ya gitmedik ama yarın gideceğiz, değil mi?", vurgu=True)
# 'ˈankaɾaja ˈɟitmedic ˈama ˈjaɾɯn ɟideˈdʒeiz, deˈil mi?'
python -m turkce_vurgu "Sapanca gölünün kıyısında yürürken İstanbul'u düşündüm."
saˈpandʒa ɟølyˈnyn kɯjɯsɯnˈda jyˈɾyɾcen isˈtanbuɫu dyʃynˈdym.
Kurulum
pip install turkce-vurgu # bağımlılıksız
pip install "turkce-vurgu[tam]" # + turkce-normalize: tarih, saat, para, Roma rakamı, kesir… da okunur
python -m turkce_vurgu "metin" her bağımsız değişkeni ayrı satırda vurgulu okunuşa çevirir.
API:
g2p(metin, vurgu=False)→ IPA okunuş;vurgu=Truevurgulu hecenin önüneˈkoyar.normallestir(metin, tam=True)→ okunuşa hazırlanmış küçük harfli metin (turkce-normalize kuruluysa önce o çalışır;tam=Falseyalnız paketin kendi sayı/kısaltma okuyucusu).sozcuk_okunusu(sozcuk, kokler, vurgu, son)→ tek sözcüğün okunuşu;ozel_kokler(metin)→ metindeki özel ad kökleri.vurgulu_hece(sozcuk, ozel_kok="", son=False)→ vurgulu hecenin sırası (vurgusuz sözcükteNone);isaretle(sozcuk)→'loˈkantada'biçiminde denetim çıktısı;heceler(sozcuk),sezer(sozcuk).SEMBOLLER→ çıktıda geçebilecek bütün semboller.
Neden
Açık kaynak Türkçe ses modelleri okunuşu çoğunlukla espeak ile çıkarır. espeak'in Türkçesinde vurgu çoğu zaman yanlıştır (ˈAnkara yerine Anˈkara, geˈliyor yerine geliˈyor), k/g/l incelmesi eksiktir. Lisansı da GPL olduğu için ticari ürüne girmesi zordur. Bu paket MIT lisanslıdır ve Türkçe kurallarla çalışır.
Ne yapar
Okunuş (G2P)
- k, g, l ön ünlüyle incelir:
kâr → caːɾ,göl → ɟøl,ilk → ilc. - Uzun ünlüler korunur (â, î, û). ğ önceki ünlüyü uzatır ya da düşer:
dağ → daː,ağaç → aatʃ. - Sayılar, yüzdeler, ondalıklar ve sık kısaltmalar sözcüğe açılır:
%12,5 → yüzde on iki virgül beş,1.250 km → bin iki yüz elli kilometre. turkce-normalize kuruluysa ([tam]) metin önce onunla hazırlanır. - Yazımda görünmeyen uzun ünlüler ve kural dışı ince l/k/g için okunuş sözlüğü (1.488 sözcük,
Vikisözlük):
nadir → naːdiɾ,malum → maːlum,metal → metal(ince l),kilometre → cilometɾe. Ekli biçimlerde kök sözlükten, ekler kurallarla okunur. - Noktalama korunur; modeller duraklama ve tonlamayı noktalamadan öğrenir.
Sözcük vurgusu (vurgu=True): vurgulu hecenin önüne ˈ konur. Kurallar Türkçe vurgu
literatüründen alınmıştır (kaynaklar aşağıda). Yöntem Oflazer & Inkelas'ınkiyle aynıdır:
sözcükteki bütün vurgu adayları toplanır, en soldaki kazanır, aday yoksa son hece vurgulanır.
| Aday | Örnek | Kaynak |
|---|---|---|
| Varsayılan: son hece; ekler eklendikçe vurgu sona kayar | kitapˈlar, kitaplarˈdan, bırakaˈcak | I&O 140 |
| Sözlüksel vurgulu kök; ek alsa da vurgu kökte kalır | loˈkantaya, tarˈhanada, ˈşimdi, ˈorada | G&K 27–29, Ink ex.64 |
| Vurgu almayan ekler: vurgu ekten önceki hecede (olumsuzluk -mA-, ek-eylem -(y)DI / -(y)mIş / -(y)sA / -(y)Im, -DIr, -(y)ken, -(y)lA, -CA, -leyin, -CAsInA, emir -(y)In) | ˈgitmedik, oˈkumayacak, okulˈdaymışlar, öğrenˈciyim, kiraˈlıktır, araˈbayla, güˈzelce, ˈtürkçe | I&O 141, Ink ex.61–62, G&K 32–34 |
| Vurgu çeken ekler: vurgu ekin ilk hecesinde (-Iyor, -ArAk, -IncE, -(y)Iver, -(y)Akal, -mAksIzIn) | geˈliyor, yaˈparak, geˈlince, tuˈtuver, bakˈmaksızın | Ink ex.54, 61; G&K |
| Olumsuz geniş zaman vurgulanır | gelˈmez, bakˈmazdık, yazˈmayız | G&K |
| Yer adları ve yabancı adlar: Sezer kuralı (Türkçe kişi adları hariç; -istan, -hane hariç) | ˈAnkara'ya, İsˈtanbul'u, Saˈpanca, hindisˈtan, Ahmeˈt'e | Sezer 1981, I&O 143–150 |
| Vurgusuz sözcükler | soru eki mi (misin, midir…), de/da, ki, ya, bile, ise, ile | G&K |
Özel adlar büyük harf ve kesme işaretinden tanınır (Serdivan'daki, cümle ortasında
Zeynep). Türkiye illeri ve bazı ilçeler cümle başında da tanınır.
Yazımdan çözülemeyen ikiliklerde vurgulanabilir okuma (son hece) seçilir. Örnekler:
- GİTme ("gitme!") / gitME ("gitmek"): tek bağlam ipucu konumdur. Cümle ya da yan cümle sonundaki (ardından noktalama ya da metin sonu gelen) yalın eylem+mA olumsuz emir okunur: acele ˈetme., ˈkorkma! Yerleşik adlar hariç (dondurˈma). Başka yerde son hece: gitˈme.
- -(y)Im ek-eylemi / iyelik;
- yüklem -lAr / çoğul -lAr.
Ek-eylemde iki ayrıntı: var/yok kökten vurgulanır (ˈvarmış, ˈyokmuş, ˈvardır); ad + -(y)mIş vurgu almaz (güˈzelmiş, çoˈcukmuş), eylemden sonra ise zaman eki olarak vurgulanır (gelˈmiş).
Doğruluk
Literatürdeki örnekler (tests/literatur.tsv). Kaynaklarda vurgusu verilmiş 123 sözcük ve
çekimli biçim; her satırda kaynağı yazar:
| Grup | Doğru |
|---|---|
| Ek ve kök kuralları (çekimli biçimler) | 90 / 90 |
| Sezer kuralı (yer adları, yabancı adlar) | 30 / 33 |
| Toplam | 120 / 123 (%97,6) |
Sezer grubundaki 3 hata (santaMOnika, monTAna, papaDOpulos) Sezer kuralının kaynaktaki
tanımıyla da çelişiyor; Inkelas bu adları kural dışı örnek olarak veriyor. Kaynaklar arasında
çelişen 2 örnek ve bağlam gerektiren 6 örnek ölçüye katılmadı. Dosyadaki 43 sözlüksel vurgu örneği
(ŞİMdi, BELki, YArın…) de toplama girmez: istisna sözlüğünden okunur, hepsi doğrudur.
Ölçü: python degerlendirme/literatur.py.
Vikisözlük (degerlendirme/vikisozluk.py, 9.030 sözcük, 5 katlı çapraz doğrulama).
Vikisözlük'ün okunuş şablonu vurgu belirtilmezse son heceyi kendiliğinden işaretler. Bu
yüzden yalnız son hece dışındaki işaretler güvenilir altın veridir.
- Son hecesi vurgulu sıradan sözcüklerde (adlar, sıfatlar, eylemler) kurallar %98,6–98,9 oranında aynı yeri bulur.
- Son hece dışı vurgulu sözcükler (1.234 sözcük, çoğu yabancı kökenli): sözlüğe
girmemiş bir sözcüğün vurgusunu kurallar ancak özel adlarda tahmin edebilir (%62). Bu
vurgu tanım gereği sözlükseldir; bütün grupta oran %22,6'dır. Bilinenler
turkce_vurgu/veri/istisna.tsvsözlüğündedir (1.203 sözcük).
Karşılaştırma için: espeak-ng'nin Türkçe vurgusu Vikisözlük'le yalnız %55 oranında aynı hecede buluşur (Ghostwriter-Dict ölçümü).
Kaynaklar
- I&O: S. Inkelas & C. O. Orgun (2003). Turkish stress: a review. Phonology 20:139–161.
- Ink: S. Inkelas (1999). Exceptional stress-attracting suffixes in Turkish: representations versus the grammar. The Prosody-Morphology Interface, 134–187.
- G&K: A. Göksel & C. Kerslake (2005). Turkish: A Comprehensive Grammar, s. 26–34.
- Sezer: E. Sezer (1981). On non-final stress in Turkish. Journal of Turkish Studies 5:61–69.
- O&I: K. Oflazer & S. Inkelas. A finite state pronunciation lexicon for Turkish.
- B. Kabak & I. Vogel (2001). The phonological word and stress assignment in Turkish. Phonology 18.
- J. Woodard (2015). Stress rules for Turkish language learners. GIALens 9(1).
- H. Yawney (2018). Toronto Working Papers in Linguistics 40.
- Vikisözlük (Wiktionary) Türkçe maddeleri, kaikki.org dökümü (wiktextract), CC BY-SA 4.0.
Semboller: Çıktı yalnız StyleTTS2'nin (ve Kokoro'nun) 178 sembollük listesindeki sembolleri kullanır. Bu modellerin önceden eğitilmiş metin gömmeleri doğrudan kullanılabilir.
Bilinen sınırlar
- Kurallar sözcük düzeyindedir. Cümle vurgusu (odak) ses modelinin işidir.
- Tam bir biçimbilim çözümleyicisi yoktur. Ekler sözcük sonundaki kalıplardan tanınır; bir ekin gerçekten ek olduğu Vikisözlük kök ve eylem listeleriyle sınanır (güzel+ce ✓, düşün+ce ✗). Belirsiz durumlarda son hece kullanılır.
- Sözlükte olmayan yabancı kökenli sözcüklerin vurgusu tahmin edilemez (son hece varsayılır).
Kaynaklı eklemeler
turkce_vurgu/vurgu.pyiçindekiLITERATURlistesine yapılır.
İlgili projeler
- turkce-plbert: bu paketin vurgulu okunuşuyla eğitilmiş Türkçe PL-BERT. StyleTTS2/Kokoro gibi modellerde tonlamayı besler.
- turkce-normalize: metin hazırlama;
[tam]ekiyle kullanılır. - turkce-duygu ve turkce-uslup: cümle tonu ve metin üslubu; aynı seslendirme hattının parçaları.
Test
python -m unittest discover -s tests # ya da: pytest -q (CI böyle çalıştırır)
python degerlendirme/literatur.py # literatür sınavı
python degerlendirme/vikisozluk.py # Vikisözlük ölçüsü; veri/vikisozluk/tr.jsonl (kaikki.org dökümü) ister
Düzen
| Yol | İçerik |
|---|---|
turkce_vurgu/g2p.py |
normalleştirme, harf → IPA, okunuş sözlüğü, g2p |
turkce_vurgu/vurgu.py |
hece bölme, kök ve ek vurgu adayları, Sezer kuralı, vurgulu_hece |
turkce_vurgu/sayi.py |
tam sayıların okunuşu |
turkce_vurgu/veri/ |
istisna.tsv (sözlüksel vurgu), okunus.tsv (okunuş), kokler.txt, fiiller.txt, adlar.txt, ozel.txt (Vikisözlük türevi) |
degerlendirme/ |
literatür ve Vikisözlük ölçüleri, sözlük üretimi (sozluk_uret.py); deneysel/ Zemberek denemesi (README) |
tests/ |
birim testleri ve literatur.tsv (kaynaklı vurgu örnekleri) |
English summary
Rule-based Turkish grapheme-to-phoneme conversion with lexical stress marking
(IPA ˈ), for TTS front-ends. It has no dependencies, is espeak-free and MIT-licensed.
It handles palatal k/g/l, long vowels, soft-g, and number and abbreviation expansion. Stress
assignment follows the linguistic literature (Inkelas & Orgun 2003; Inkelas 1999; Göksel &
Kerslake 2005; Sezer 1981) using the Oflazer & Inkelas leftmost-wins algorithm. It combines
lexically stressed roots (1,203 entries from Wiktionary, CC BY-SA), pre-stressing and
stress-attracting suffixes, and Sezer stress for place and foreign names.
- On 123 stress examples cited in the literature, 120 are correct (97.6%).
- On final-stressed common words from Wiktionary, the rules agree 98.6–98.9% of the time.
- For comparison, espeak-ng agrees with Wiktionary on the stressed syllable in only 55% of words.
The output uses only StyleTTS2/Kokoro symbols. A Turkish PL-BERT trained on this G2P lives
in the sister project turkce-plbert.
Lisans
Kod MIT, bkz. LICENSE. turkce_vurgu/veri/ altındaki sözlük dosyaları
Vikisözlük'ten türetildiği için CC BY-SA 4.0'tır (degerlendirme/sozluk_uret.py üretir).
Metadata
Release files for turkce-vurgu 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| turkce_vurgu-0.1.1.tar.gz | 129.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| turkce_vurgu-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 251.9 kB
Release files / turkce_vurgu-0.1.1.tar.gz
| Download URL | turkce_vurgu-0.1.1.tar.gz |
|---|---|
| Size | 129.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d663a0b3f473c2b7a26460d5ba59a49937bb7d1716d195ab943882a169c07a19
|
|
BLAKE2b-256 checksum How to use checksums |
05cfa79eacbfb23bd47d334a4dcd0ebe85816500f6405eb2bc187fd16c141f08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.10
|
Release files / turkce_vurgu-0.1.1-py3-none-any.whl
| Download URL | turkce_vurgu-0.1.1-py3-none-any.whl |
|---|---|
| Size | 122.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
872c124342d607023f86736fca9ffb1f5e1b1af9ab162195dd4b5d9161062411
|
|
BLAKE2b-256 checksum How to use checksums |
56023aa3dfd6d34f026521bc28480abdfc8dcd5455370ca29ee9a0bd0c82bf5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.10
|