Bundan önceki yazımda JRuby ile Zemberek kütüphanesinin nasıl kullanılabileceğini basitçe görmüştük. Yazıda yer alan örneklere göz attığımızda Zemberek kütüphanesini kullanırken Java’da izlenen yolu birebir izledik.
Yani bir kelimeye ait önerileri bulmak için şu kodu kullandık.
oneriler.each_with_index do |oneri, i|
...
...
Oysa bu kod Ruby programcıları için pek de güzel sayılmayacaktır.
Şöyle bir erişimin daha güzel olacağı aşikar.
oneriler = "Meraba".oneriler
# Meraba'nın yazımı doğru mu?
puts "Meraba".yazim_dogru?
# Merhaba'yı heceler, heceleri kullanıma sunar
"Merhaba".hecele { |hece| print "#{hece}-" }
Bunları yapmak için öncelikle ufak bir sınıf ve modül yazmalı daha sonra bunu String sınıfına dahil etmeliyiz.
ZemberekJRuby sınıfı
#
# Murat ÇELİKER, murat.celiker@gmail.com
# http://ikinoktayazilim.com/wordpress/
#
require 'java'
require 'singleton'
# Basit Zemberek Ayrıştırıcımız
# Yalnızca bazı methodlar yer almaktadır
#
class ZemberekJRuby
include Singleton
# zemberek kütüphanemizi dahil edelim
require 'zemberek-tum-2.0.jar'
# zemberek sınıflarımızı dahil edelim
include_class 'net.zemberek.erisim.Zemberek'
include_class 'net.zemberek.tr.yapi.TurkiyeTurkcesi'
# bir tane zemberek oluşturalım
def initialize
@zembo = Zemberek.new(TurkiyeTurkcesi.new)
end
# kelimeDenetle çevirisi
def kelime_denetle(kelime)
@zembo.kelimeDenetle(kelime)
end
# hecele çevirisi
def kelime_hecele(kelime)
@zembo.hecele(kelime)
end
# oner çevirisi
def kelime_oner(kelime)
@zembo.oner(kelime)
end
end
Gördüğünüz gibi basit bir Zemberek JRuby sınıfı yazdık. Singleton kullanarak yalnızca bir kez oluşturulmasını da sağladık. Şimdi artık modülümüzü de yazıp String sınıfına dahil edip daha bi rubysel kullanım yapabiliriz.
TurkceJRb::Katar
#
# örn: "deneme".denetle
#
module TurkceJRb
module Katar
def yazim_dogru?
ZemberekJRuby.instance.kelime_denetle(self)
end
def hecele
heceler = ZemberekJRuby.instance.kelime_hecele(self)
if block_given?
heceler.each { |hece| yield(hece) }
else
return heceler
end
end
def oneriler
oneri_listesi = ZemberekJRuby.instance.kelime_oner(self)
if block_given?
oneri_listesi.each { |oneri| yield(oneri) }
else
return oneri_listesi
end
end
end
end
Katar sınıfını dahil edelim
#
class String
include TurkceJRb::Katar
end
Yeni Örneğimiz
İlk yazıdaki örneğimiz artık şu hale geldi:
#
# String.oneriler , String.denetle gibi
#
yazi = ARGV.shift || 'meraba'
if yazi.yazim_dogru?
puts "#{yazi} dogru yazilmis"
yazi.hecele { |hece| print "#{hece}-" }
else
oneriler = yazi.oneriler
# önerilerimizi ekrana yazdıralım
puts "#{yazi} icin size #{oneriler.length} tane onerim var:"
oneriler.each_with_index do |oneri, i|
puts "Oneri #{i+1}: #{oneri}"
end
# yahut
yazi.oneriler { |oneri| puts "#{oneri}" }
end
Dosyanın tamamına ait kaynak kod yazının devamında yer almaktadır.
#
# Murat ÇELİKER, murat.celiker@gmail.com
# http://ikinoktayazilim.com/wordpress/
#
require 'java'
require 'singleton'
# Basit Zemberek Ayrıştırıcımız
# Yalnızca bazı methodlar yer almaktadır
#
class ZemberekJRuby
include Singleton
# zemberek kütüphanemizi dahil edelim
require 'zemberek-tum-2.0.jar'
# zemberek sınıflarımızı dahil edelim
include_class 'net.zemberek.erisim.Zemberek'
include_class 'net.zemberek.tr.yapi.TurkiyeTurkcesi'
# bir tane zemberek oluşturalım
def initialize
@zembo = Zemberek.new(TurkiyeTurkcesi.new)
end
# kelimeDenetle çevirisi
def kelime_denetle(kelime)
@zembo.kelimeDenetle(kelime)
end
# hecele çevirisi
def kelime_hecele(kelime)
@zembo.hecele(kelime)
end
# oner çevirisi
def kelime_oner(kelime)
@zembo.oner(kelime)
end
end
# Katar değiştiricimiz
#
# örn: "deneme".denetle
#
module TurkceJRb
module Katar
def yazim_dogru?
ZemberekJRuby.instance.kelime_denetle(self)
end
def hecele
heceler = ZemberekJRuby.instance.kelime_hecele(self)
if block_given?
heceler.each { |hece| yield(hece) }
else
return heceler
end
end
def oneriler
ZemberekJRuby.instance.kelime_oner(self)
end
end
end
# String sınıfına eklemeler yapalım
#
class String
include TurkceJRb::Katar
end
# örneğimizi katar sınıfı methodlarına çevirelim
#
# String.oneriler , String.denetle gibi
#
yazi = ARGV.shift || 'meraba'
if yazi.yazim_dogru?
puts "#{yazi} dogru yazilmis"
yazi.hecele { |hece| print "#{hece}-" }
else
oneriler = yazi.oneriler
# önerilerimizi ekrana yazdıralım
puts "#{yazi} icin size #{oneriler.length} tane onerim var:"
oneriler.each_with_index do |oneri, i|
puts "Oneri #{i+1}: #{oneri}"
end
# yahut
yazi.oneriler { |oneri| puts "#{oneri}" }
end







[…] JRuby ile Zemberek Kullanımı (1) 18/10/07 tarihinde Ruby, Yazılım Geliştirimi, Netbeans, JRuby bölümlerinde yer almak üzereyazıldılar. Yazının 2. bölümüne buradan ulaşabilirsiniz. […]