Giriş
İngilizceden farklı olarak Almanca'nın oldukça sesli bir yazı sistemine sahip olduğu düşünülmektedir . Bu, imla ve telaffuz arasındaki yazışmanın yakın olduğu anlamına gelir. Aşina olmadığınız herhangi bir kelime verildiğinde, yazım sistemi nedeniyle nasıl telaffuz edileceğini hala bilirsiniz. Bu, bir bilgisayarın bunu doğru yapabileceği anlamına mı geliyor?
Meydan okuma
Almanca bir kelimeyi temsil eden bir dize girdi olarak alan ve Uluslararası Fonetik Alfabesinde (IPA) telaffuzunu basan veya veren bir program veya işlev yazın .
Elbette sizi Almanca ya da IPA'nın tamamını öğrenmeye zorlamayacağım . Bu bir Wikipedia bölümü , ihtiyacınız olan hemen hemen tüm Alman IPA kurallarını sağlar ve ben bir yıpranmış C # başvuru uygulamasını kodladım .
Ayrıca, bu bağlantıda, 400 ortak Almanca kelimenin ve IPA telaffuzlarının bir listesidir (doğrulama için gereklidir). Bu listeden örnek almak gerekirse, girdi ise solltest
doğru çıktıdır ˈzɔltəst
.
Referans uygulaması, Vikipedi bölümünde belirtilmeyen iki yararlı kural ekler: Kelime vurgusunun ilk hecede olduğunu (çok büyük olasılıkla Almanca'da) olduğunu ve "e" harfinin schwa sesini / ə / 'yi ne zaman temsil ettiğini belirlemek için daha iyi bir buluşsal yöntem kullandığını varsayar. Aynı zamanda önekler için özel işlem uygular, ancak bu düşündüğüm kadar iyi sonuç vermedi.
ayrıntılar
Geçerli bir giriş olarak kabul edilmek için, programınızın aşağıdaki gereksinimleri karşılaması gerekir:
- IPA çıktınızın, referans kelime listesindeki 400 kelimeden en az 300 tanesi için tam bir eşleşme olmalıdır (referans uygulaması 333 doğru olur)
- Programınız makul herhangi bir Almanca kelime için bir tahmin yapmak zorundadır. Bu yüzden teknik bir ihtiyacımız var, bunun anlamı, regex
[a-zA-ZäÄöÖüÜ][a-zäöüß]*
ile eşleşen ve en az bir ünlü olan (aeiouyäöü) herhangi bir girdi için , beyaz boşluk içermeyen çıktı üretmeniz ve hata olmaması gerektiği anlamına gelir. - Program deterministik olmalı (her zaman aynı girdiyi veren aynı çıktıyı üret)
- Aksi takdirde, standart boşluklar yasaktır (özellikle saha dışı kaynakları getirme konusunda)
Yapmanıza izin verilen çeşitli şeyler:
- Gerekirse çıktınızda öncü ve iz bırakan boşluk bırakın
- Çıktıda önceden var olan herhangi bir karakter kodlamasını kullanın (Unicode'un iyi çalıştığını düşünmeden başkasını düşünemiyorum, ancak tebrik ediyorsanız)
- Girişin, Unicode normalizasyon formları NFD, NFC, vb. Gibi normalleştirilmiş bir biçimde olduğunu varsayalım. Örneğin, ä, tek bir karakter veya bir temel karakter + bir birleştirme karakteri olarak yazılır mı?
- Standart giriş ve çıkış yöntemlerini kullanın
Puanlama ve IPA Karakterleri
Puanlama bayt cinsindendir. UTF-8'de Alman karakterleri ve IPA karakterlerinin 2 bayt olduğu konusunda uyarılırsınız. Ayrıca, IPA karakteri U + 0327 AŞAĞIDAKİ YAN KESME BİRLEŞTİRMESİ (̯) bir Unicode birleştirme karakteridir ve kendi başına 2 baytlık bir UTF-8 karakteridir. Bu like gibi bir şeyin UTF-8'de 4 bayt olarak sayılacağı anlamına gelir. Meraklı için, bu sembol ünlüün heceli çekirdeği oluşturmadığı anlamına gelir (bunun yerine bir önceki).
Ayrıca, bazı fontlarda diğer ASCII karakterlerine benzeyen bu IPA karakterlerine dikkat edin: ɡ, ɪ, ʏ, ː (uzun bir sesli harf işaretler), ˈ (heceli, çok heceli bir kelimede strese sahip olan işaretler).
Referans kelime listesi nasıl oluşturuldu
Bu bölüm, zorluk için gerekli olmayan ekstra bilgidir.
Kelime listesi, bu Vikisözlük kelime sıklığı listesinden alındı , gövde farkı nedeniyle tekrarları kaldırarak İngilizce Vikisözlük'te Almanca girişleri olmayan iki kelime çıkarıldı (oh & hey). IPA, hem İngiliz hem de Alman Vikinglere bakıyor. Birden fazla telaffuz önerildiği zaman, daha resmi ve standart olanı seçtim. Bu açık değilse, genel kurallara en uygun olanı seçtim.
Ayrıca "r" harfinin nasıl telaffuz edildiğini de standartlaştırmam gerekiyordu. Bu mektubun nasıl telaffuz edildiğine bölgeye büyük ölçüde bağlıdır ve Vikisözlük seçtiği yazıyla hiç tutarlı değildi. Aşağıdakine doğru eğiliminde olduğumu hissettim: "r", / ɐ̯ / tarafından telaffuz edildiğinde uzun bir ünlü harf tarafından takip edilir ve bir sesli harf bunu takip etmez, aksi halde, ʁ olur. Bu yüzden, hepsini tutarlı bir şekilde uygulayan ters ve ekler hariç, bu kurala uyacak şekilde değiştirdim / (f) ɛɐ̯ /. Benzer şekilde, "eu" yi / ɔʏ̯ / olarak standartlaştırdım.
#~WordData~"PhoneticForm"&
), ancak yalnızca İngilizce kelimeler için çalışıyor.