Python tabanlı Türkçe deasciifier

0
FZ
Kısa süre önce Deniz Yüret'in Türkçe 'deasciifier'ını (turkish-mode, Emacs Lisp ile yapılmış) Python'a çevirdim. Kaynak kod adresi: http://github.com/emres/deasciifier.

'deasciification' ve 'deasciifier' terimlerine aşina olmayanlar için kısa açıklama: Türkçe harfler kullanılmadan, sadece ASCII harfler ile yazılmış Türkçe metinlerin, düzgün şekilde Türkçe harfler kullanılarak yazılmış hale çevrilmesine 'deasciification' denir. Bu duruma bir örnek verelim, girdi metni mesela

"Opusmegi cagristiran catirtilar."

ise, çıktı metni şöyle olmalıdır:

"Öpüşmeği çağrıştıran çatırtılar."
Peki ama kim Türkçe harfleri kullanmadan Türkçe yazar, buna benzer durumlar ne zaman karşımıza çıkar? Mesela klavyeniz Türkçe olmayabilir, tembel olabilirsiniz, yahut IMDb'deki Türk film isimlerini Türkçe harfli hale getirmeniz gerekiyor olabilir (örn. "Yahsi bati"yi "Yahşi Batı" yapmanız gerekebilir).

Her ne kadar bu işi ya da benzerini yapan sistemler daha önceden geliştirilmiş olsa da Python ile yeniden yazmanın gerekli olduğuna karar verip bunu gerçekleştirdim çünkü:

- Deniz Yüret'in geliştirdiği turkish-mode Emacs için Emacs Lisp ile geliştirilmiş bir sistem. Ben de Emacs kullanıyorum ama çoğunluk için bu durum geçerli değil.

- Bu sistemin Javascript implementasyonu http://turkce-karakter.appspot.com/ adresinde mevcut ve son kullanıcı için pratik fakat komut satırından yahut kendi programları içinden iş yapmak isteyen programcılar için çok pratik değil.

- Zemberek tabanlı bir 'deasciifier' açık kodlu olarak erişilebilir durumda ve web tabanlı hali de var http://zemberek-web.appspot.com/ adresinde ama yine programcılar için çok pratik değil. Tek istediğiniz pratik şekilde 'deasciification' yapmak ise önce Java kurmak, ardından da tam teşeküllü bir imla kontrol sistemini devreye sokmak, vs. biraz yorucu bir iş. Ayrıca Zemberek'in kullandığı yöntemler farklı ve bazı metinleri düzgün 'deasciify' edemiyor.

- Sabancı Üniversitesi'de Gökhan Tür tarafından geliştirilmiş (ve burada bahsedilen deasciifier'a ilham kaynağı olmuş) sistemin bazı kısıtkamaları var: Kaynak kodu açık değil, sistemi download edemiyorsunuz, web arayüzünün uzunluk limiti var. Ayrıca neden verilerinizi bir başkası ile paylaşmak zorunda kalasınız ki?

Şimdi de birkaç kullanım örneği, önce Python içinden:



Ve şimdi de komut satırından:

$ echo "Yilanlarin Ocu" | python deasciify.py 
Yılanların Öcü

echo "Hic fena olmadi sanirim, ne dersin hocam?" | python deasciify.py 
Hiç fena olmadı sanırım, ne dersin hocam?


Elbette bu deasciifier da mükemmel değil, bazen hata yapabiliyor ancak anadili Türkçe olan biri olarak pratik olarak hemen her türlü durumda işe yaradığını ve çok pratik olduğunu söyleyebilirim. Sistemin ardındaki teoriyi merak ediyorsanız Deniz Yüret'in makalesini okuyabilirsiniz. Bu sisteme eklenebilecek en heyecan verici özellik herhalde sistem çalışırken onun hatalarını düzeltip sistemi eğitebilme özelliği olurdu ancak bu başka bir projenin konusu olsun şimdilik. Şimdiki yakın vadeli planlarım arasında şunlar var: Sisteme web arayüzü eklemek, daha da kolay kullanılmasını sağlamak için Python Package Index'e eklemek, kendi başına çalışan GUI tabanlı bir versiyon geliştirmek ve Linux ile Windows'da kolayca kullanılabilmesini sağlayacak şekilde eklemeler yapmak.

Not: Bu yazı http://ileriseviye.org/blog/?p=3274 adresindeki İngilizce yazının çevirisidir.

Görüşler

0
FZ
0
pichoscosama
Çalışma prensibi nedir? "Yilan" kelimesinin "Yılan" olduğu nasıl algılanmakta? Office veya FF gibi kelimelerin olduğu bir liste mi var?
0
FZ
Bir tür liste var evet ancak karar listesi denen özel bir yapı kullanıyor ve bu yapı da epey büyük bir Türkçe metin yığını üzerinden istatistik analiz ile oluşturukmuş durumda. Bunu gerçekleştiren Deniz Yüret'in özgün makalesini okursanız orada detaylar mevcut: http://www.denizyuret.com/2006/11/emacs-turkish-mode.html ve "Greedy prepend algorithm for decision list induction".
Görüş belirtmek için giriş yapın...

İlgili Yazılar

SynthMaster: İlk Türk ses işleme ve efekt yazılımı

FZ

Bilgisayarlar sayesinde dolap büyüklüğündeki ses işleme cihazları küçük yazılımlara dönüştü. Son örnek bir Türk'ün imzasını taşıyor.

Bu alandaki dev oyuncuların yanına, işlev olarak hiçbir eksiği bulunmayan bir isim daha katıldı: SynthMaster. Bülent Bıyıkoğlu adlı bir Türk tarafından 1995 yılında o zamanki bir yazılım yarışmasına katılmak için hazırlanmaya başlanan SynthMaster, 2004 yılından bu yana aktif olarak geliştirilerek tam bir ürün haline getirilmiş. Bıyıkoğlu, 90'lı yıllarda bu yazılım için çalışırken hazırladığı EffectsMaster adlı uygulama sayesinde Kanada'dan bir iş teklifi alarak bu ülkeye taşınma kararı vermiş.

Herhangi Bir Metnin Hangi Dilden Olduğunu Hızlıca Anlama

FZ

Yapay zekâ dersim için Prolog ile boğuşurken ve comp.lang.prolog haberleşme/tartışma grubunu mesaja boğarken oraya katkıda bulunan bir hocanın, Gertrand Van Noord'un enteresan bir çalışması dikkatimi çekti.

Perl ile yazılmış bir tür dil kategorizasyon programı. Yani bir GİRDİ'ye bakıp, "hmm bu Türkçe" diyor, başka bir girdiye bakıp "hmm, bu da Portekizce" diyor ve bunu kısa sürede, yüksek başarım oranı ile, 69 farklı dil için yapıyor. Açık kodlu, özgür yazılım kategorisinde alan TextCat'in bir de web demosu var.

Van Noord, TextCat'in ticari ve ticari olmayan rakiplerini de sıralamış. Kendi yazılımına dil sayısı olarak en çok yaklaşan yazılım XEROX Language Identifier ticari bir yazılım ve 40 civarı dil ayırt edebiliyor.

Hep birlikte tekrarlıyoruz: Özgür Yazılımı Seviyoruz! :)

ELOG

m1a2

Uzun zamandan beri aradığım türde bir programı freshmeat`te nihayet buldum :) ELOG, her türden notlarınızı browser üzerinden yazabileceğiniz son derece hafif bir web defteri. Parçacık fiziği üzerine araştırmalar yapan `Paul Scherrer Institute`ın bir elemanı tarafından (Stefan Ritt) yazılan program harika iş görüyor.

Yüz Yıl Sonraki Programlama Dilleri (ya da Perl vs. Lisp ve Lambda Calculus)

FZ

Deneyimli LISP `hacker´ı Paul Graham bu kez yüzyıl sonra ne tür programlama dilleri kullanabileceğimiz üzerine tahrik edici bir makale yazmış. Nesneye yönelik programlamaya, Java´ya, C++ diline saydıran yazar arada Perl diline de değiniyor.

Hazır konu açılmışken ilginizi çekebileceğini düşündüğüm bir başka yazı ise Mark Jason Dominus´un Perl´in Lambda Calculus içerdiğine dair bir prezentasyonu. (Prezentasyonun diğer adı: 1+1´i hesaplamak için 163 satırlık bir program nasıl yazılır? ;-)

İşitsel programlama notları

misafir

Bu yazıda işitsel(audio) programlama konusunda yaptığım küçük bir araştırmanın sonuçlarını paylaşmak istiyorum. Yazının sonuna kısa bir Perl betiği ekleyeceğim. Bunun için Perl ustalarından özür diliyorum. Çünkü henüz çok acemisi olduğum bir dil Perl.