February 17, 2010

Emacs Turkish mode

This is for people trying to type Turkish documents on a U.S. keyboard using Emacs. The program provides a turkish-mode in which the correct Turkish accents are added to the ascii version of the last word typed each time the user hits space. The latest version is available here.

It was inspired by Gökhan Tür's deasciifier:
http://www.hlst.sabanciuniv.edu/TL/deascii.html

The program uses decision lists (included at the end of this file) which was created based on 1 million words of Turkish news text using the GPA algorithm. For more information on GPA see the Greedy prepend algorithm for decision list induction.

To activate the program first load this file into emacs:
M-x load-file ENTER turkish.el ENTER
Then turn on the turkish mode:
M-x turkish-mode

When Turkish mode is enabled, the space, tab, and enter keys correct the previous word by adding Turkish accents. For corrections use C-t to toggle the accent of the character under the cursor.

Related link

36 comments:

ustunozgur said...

Bu modda Enter tusu calismiyorsa:

(if (= ?\r last-input-event)

satirini

(if (= ?\r last-command-event)

ile degistirin.

ustunozgur said...

Bu mod Emacs 23'te calismiyor maalesef. Sanirim emacs'te yapilan unicode degisiklikler buna sebep oldu.

turkish-char-alist'in birinci ve ucuncu sutunlarini degistirince bazi karakterler icin sorun cozuluyor (ascii kodu olanlar icin - ü, ç ve ö gibi) ama digerleri icin farklı karakterler geliyor.

Bunu düzeltmenin bir yolu var mı acaba?

Deniz Yuret said...

Yukarida bahsi gecen iki problem de duzeltildi. En son version (2.5) post'taki linkten indirilebilir. Simdi bir de biri bunu browser extension'a cevirse de bu comment'ler duzgun ciksa :)

Unknown said...

Tekrar teşekkürler hocam. Dün benim de aklımdan geçiyordu bunu
Firefox'a nasıl entegre ederiz diye. Emacs Lisp kodunu biraz daha
inceleyeyim, belki Jetpack ile Firefox'a kolayca entegre etmek mümkün
olabilir [1].

Not: Bu yazıdaki Türkçeye özgü harfler turkish-mode ile otomatik
olarak üretilmiştir ;-)

1- https://jetpack.mozillalabs.com/

ustunozgur said...

Güncelleme için teşekkürler. Google Chrome'un Edit in Emacs eklentisi ile çok
güzel çalışıyor. .emacs dosyama şu satırı ekledim:

(add-hook 'edit-server-text-mode-hook 'turkish-mode)

Native bir eklenti yapılana kadar bu oldukça iyi bir çözüm gibi duruyor.

ustunozgur said...

Bu eklentinin bir güzel yanı da emacs'ta yazmayı unutup, doğrudan tarayıcıda yazarsak, edit tuşuna bastığımızda şu ana kadar yazdığımız metni de emacs'e göndermesi. Bu şekilde turkish-mode'daki turkish-correct-region ile önceden yazdığımız metni göndermeden önce Türkçe'ye uygun hale getirebiliyoruz. Aslında moda basit bir turkish-correct-buffer da eklenebilir.

Deniz Yuret said...

Browser'a entegrasyon yerine browser'dan emacs'ın çağırılabileceği hiç aklıma gelmemişti. Firefox için de araştırdım ve aşağıdaki kaynakları buldum:

* mozex
* conkeror
* It's all text

Bu yorumu son linkteki "It's all text" eklentisini kullanarak Firefox'tan açtığım Emacs ile yazıyorum. MacOS biraz uğraştırdı. Emacs olarak emacsformacosx kullandım. Ayarlarda uygulama olarak "/Applications/Emacs.app/Contents/MacOS/Emacs" kullanmasını söyledim. Bu arada Emacs'ın eski versionlarını test etmedim, hala çalışması lazım programın ama birşeylerin bozulduğunu farkederseniz lütfen haber verin.

ustunozgur said...

(defun turkish-correct-buffer ()
"Adds necessary accents to the words in the whole buffer."
(interactive)
(turkish-correct-region (point-min) (point-max))
)

Tüm bufferi düzeltmek için bu fonksiyonu kullanılabilirsiniz.

Deniz Yuret said...

turkish-correct-buffer 2.6 versionunda eklendi, link update edildi.

ustunozgur said...

Son yapilan degisikligi geri almak icin (daha dogrusu son sozcugu asciiye donusturmek icin) bunu kullanabilirsiniz.

(defun turkish-asciify-last-word ()
"Asciifies the last word, so that one can undo the last correction without losing place"
(interactive)
(save-excursion
(let ((p (point)))
(turkish-backward-word)
(turkish-asciify-region (point) p))))


Keybindinglere de

("\C-c\C-t" . turkish-asciify-last-word)

satirini ekledim, bu sayede C-c C-t ile son kelime asciiye donusturulebiliyor, yaziya kalindigi yerden devam edilebiliyor.

Deniz Yuret said...

Yukarıdakine benzer bir komutu (turkish-toggle-last-word) son version'a (2.6) ekledim. Tekrar tekrar basıldığında ascii ile türkçe kelime arasında gidip geliyor. Key binding olarak M-t seçtim: Standart emacs'te C-t ve M-t transpose-chars ve transpose-words komutlarını (hiç kullanmama gerek kalmadı bugüne kadar) biz turkish-toggle-accent ve turkish-toggle-last-word ile değiştirmiş olduk. Son olarak 2.5'te yaptığım eklemeler bazı eski version'larda çalışmasını bozmuş turkish.el'in, 2.6'daki düzeltmelerle 21, 22, ve 23 çalışıyor durumda olmalı.

ustunozgur said...

Bu son komut çok kullanışlı oldu, teşekkür ederim. turkish-correct-buffer yanlışlıkla silinmiş ama sanırım.

Deniz Yuret said...

Haklısın. turkish-correct-buffer ve turkish-asciify-buffer eklendi (v2.7).

Unknown said...

Python implementasyonu eklendi: Turkish deasciifier in Python and state of the art in deasciification

Unknown said...

> Şimdi bir de biri bunu browser
> extension'a çevirse de bu comment'ler
> düzgün çıksa :)

Firefox add-on eklendi: https://addons.mozilla.org/en-US/firefox/addon/204311/. Bu yazıyı hiç Türkçe harf kullanmadan yazıyorum ve birazdan sağ tuşla tıklayıp Türkçe harfli hale çevirmeye çalışacağım. Bakalım nasıl olacak hep birlikte göreceğiz.

Unknown said...

Mustafa Emre Acer'in yaptığı Chrome extension da fırından yeni çıktı: https://chrome.google.com/extensions/detail/nhfdmlgglfmcdheoabgklabmgjklgofk

Unknown said...

Benim Python implementasyonunun web arayüzünü de hazırladım: http://turkceyap.appspot.com/

Unknown said...

Java versiyonu da tamam.

Unknown said...

Firefox add-on halinin 0.2 versiyonu çıktı, buraya yazıyorum çünkü henüz otomatik güncelleme özelliği yok, elle güncellemek gerekiyor aşağıdaki adrese giderek. Bu sürümle özgün turkish-mode'a biraz daha yaklaşmış durumda, mesela: Cümle içinde yok kullanınca sorun yok artık. Yani iyi oldu gibi, olmuş gibi: https://addons.mozilla.org/en-US/firefox/addon/204311/

Anonymous said...

Arkadaşlar, Python versiyonunu kullanarak bir Adium plugin'i yaptım. Eğer Mac & Adium kullananınız varsa, ilginizi çekebilir.

Not Defteri said...

Selamlar,
Sabancinin sitesi calismiyor oldugundan, google aramalarimda sayfanizi buldum, tum thread'i ve sonudaki mozzilla application'i bilmeden teker teker okudum, pek program yaziciligindan anlamiyorum, ama super bir olay, ikinize de cok tesekkurler, harika bir application olmus

Unknown said...

> Arkadaşlar, Python versiyonunu
> kullanarak bir Adium plugin'i yaptım.
> Eğer Mac & Adium kullananınız varsa,
> ilginizi çekebilir.

Adresi var mi download etmek için?

Unknown said...

Son derece yararli bir calisma. Latex dokumanlari hazirlarken de ise yariyor, oldugu gibi kullanilsa bile. Ama belki Latex icin biraz daha uyarlanabilir. Cok tesekkurler.

Unknown said...

Ruby ile yapilmis hali de surada: https://github.com/berkerpeksag/ruby-turkish-deasciifier

Unknown said...

Perl sürümü de çıkmış. Firefox add-on'un da 0.2.1 sürümü çıktı.

selin said...

Bunun Mac'te calisan versiyonuna nasil ulasabilirim?

selin said...
This comment has been removed by a blog administrator.
Unknown said...

Firefox 4.0 ve üzeri için uyumlu olan Turkish Deasciifier add-on yayımlandı: https://addons.mozilla.org/en-US/firefox/addon/turkish-deasciifier/. Daha detaylı bilgi için: http://goo.gl/BY3DW

Anonymous said...

Emacs ve Firefox'ta artık gerçekten mutluyum. Sağolun.

Unknown said...

Emacs son versiyonu 25 te calismiyor lutfen duzeltirmisiniz cok tesekkurler.

Unknown said...

Emacs son versiyonu 25'te calismiyor duzeltirmisiniz lutfen. Cok tesekkurler.

Unknown said...

Emre Guneyler,

Deniz Yuret hoca buna mudahale eder mi bilmiyorum ama https://github.com/emres/turkish-mode adresine gidip bir 'issue' acarsaniz, baska bir deyisle https://github.com/emres/turkish-mode/issues adresine gidip 'New Issue' dugmesine basip, tam olarak hangi Emacs surumunu kullandiginizi belirtirseniz (M-x emacs-version), belki yakin zamanda ilgilenip cozmeye calisabilirim. Hatta bunu halledebilirsem (yani hem Emacs 24.x hem de son surum Emacs 25.x serisinde duzgun calisir hale getirme isini halledebilirsem), ELBA ya da MELPA gibi bir depoya koyup 'M-x package-install' ile kurulabilir hale getirme planim var.

Unknown said...

MELPA'ya eklendi: https://melpa.org/#/turkish. Emacs versiyon 24.5.1 ile çalışıyor. Yeni stabil sürüm çıktığında deneyip hata bildiriminde bulunursanız, vakit ve fırsat oldukça ben ilgilenmeye çalışırım (eğer Deniz Yüret hoca ya da başkası daha önce davranmazsa). Hata bildirimi için şu adresi kullanabilirsiniz: https://github.com/emres/turkish-mode (eğer nasıl hata bildirimi açacağınızı bilmiyorsanız belirtin, onu da açıklarım).

Unknown said...

Merhaba,

https://deasciifier.com/

Burdaki web sitenize mobil cihazlar üzerinden Firefox tarayıcısı ile giriş yapınca, "Yazarken çevir" özelliği çalışmamaktadır. Bu sorunu nasıl çözebiliriz ?

Teşekkürler..

Deniz Yuret said...

Sitenin yazarina basvurmanizi tavsiye ederim.

brolin said...
This comment has been removed by a blog administrator.