GitHub Üzerinde Maven Repo’su Oluşturmak

Bu makalede adım adım Java projeleriniz için GitHub üzerinde Maven deposu (repository veya repo) oluşturmayı anlatacağım. Yazıya başlarken bir GitHub hesabınızın olduğunu ve Maven’ı biraz da olsa bildiğinizi kabul ediyorum.

GitHub üzerindeki bazı Java projelerimin Maven kullanan geliştiriciler tarafından kolayca kullanılabilmeleri amacıyla GitHub üzerinde bana ait ancak herkesin erişimine açık bir Maven deposu oluşturmaya karar verdim. Son zamanlarda bir çok geliştirici de aynı yolu tercih ediyor zaten. Bunun için gereken adımları buraya güzelce not ederek hem bir dahaki sefere bakabileceğim hem de herkesin faydalanabileceği bir döküman ortaya çıkmasını amaçlıyorum. Okumaya devam et

Nüve ile Türkçe Cümle Sonu Tespiti

Önceki yazımda Türkî diller için bir doğal dil işleme kütüphanesi olan Nüve‘den bahsetmiştim. Nüve 1.1 versiyonu ile birlikte cümle sonu tespit yeteneği de kazanmış durumda. Nüve’nin cümleleme modülü kural tabanlı çalışıyor ve mükemmel olduğu söylenemez ancak bir çok metin için iş görecek kadar başarılı olduğunu söyleyebilirim. Kullanacak arkadaşlar da gördükleri hataları bildirirerek başarımın artmasına yardımcı olabilir ve projeye katkıda bulunabilirler.

Nüve’yi projenize 2 şekilde ekleyebilirsiniz.

1-Visual Studio->Tools->Library Package Manager->Package Manager Console yolu ile açılan pencerede

PM> Install-Package Nuve

komutunu girmek.

2- Solution Explorer’da projenizin References düğümüne sağ tıklayarak Manage Nuget packages’ı seçmek ve sağ üstteki arama çubuğuna Nuve yazarak “Install” düğmesine basmak.

Nüve için cümleleme kod örneği ise şu şekilde:

var paragraph = "Prof. Dr. Ahmet Bey 1.6 oranında artış var dedi 2. kez. E-posta adresi ahmet.bilir@prof.dr imiş! Doğru mu?";
 Splitter splitter = new RegexSplitter(RegexSplitter.ClassicPattern);
 var segmenter = new TokenBasedSentenceSegmenter(splitter);
 var sentences = segmenter.GetSentences(paragraph);
 foreach (string sentence in sentences)
 {
      Console.WriteLine(sentence);
 }     

Faydalı olması dileğiyle. Herkese kolay gelsin

Türkçe Cümle Sonu Tespit Araçları için bir Karşılaştırma

Bu yazıda cümle sonu tespiti problemini ve Nüve başta olmak üzere Türkçe için belli başlı cümle sonu tespit araçlarını (Zemberek, OpenNLP, ITU Pipeline) incelemeye çalıştım.

Doğal dil işleme ve metin analizi çalışmalarında zaman zaman metni cümlelerine ayırmaya (cümlelemeye) ihtiyaç duyulur. Literatürde bu probleme “cümle sonu tespiti” (sentence boundary detection) denir. Metindeki satırsonu karakterleri (newline, \n, \r) paragrafları birbirinden ayırır. Cümleleme işlemi paragraflar üzerinde yapılır. Bir paragraf bir ya da daha fazla cümleden oluşabilir.

Türkçe bir paragrafı cümlelerine ayırmak sanıldığından sanıldığı kadar kolay değildir. Zira nokta, ünlem, soru işareti gibi karakterler her zaman cümlenin sonunda gelmezler. Aşağıdaki rastgele cümlelerden oluşan paragrafa bir göz atalım. Karakterlerden cümle sonu olanlar yeşil olmayanlar ise kırmızı ile işaretlenmiştir.
Uluslar, bu ekonomik buhran sonucunda 2. Dünya Savaşı’nı yaşamıştır. Bu sezon kaybedilen maç sayısı 2. Dünya Kupası’na katılma şansı azalıyor. Cumhuriyetimizin 75. yılı coşkuyla kutlandı. Tahta çıkan IV. Murat emirler yağdırdı. Uzun zamandır çalışan Ahmet koşuda 2. uzun atlamada ise ancak 4. olabildi. A. Mehmet YILDIZ size uğradı. Alfabenin ilk harfi A. Mehmet’e bunu öğretmeniz gerekiyor. Genel Müdür Mehmet Bey her fırsatta muhteşem! faaliyetlerini anlatıyor. Devlet içinde devlet olmuşlar, devlet adına çalışıyorlar, devlet adamlarıyla ahbap çavuşlar.. şu, bu! Cumartesi akşam 5 p.m.’de geldi. www.cs.hun.edu.tr okulumuzun web sitesidir. E-posta adresi bilgi@cs.deu.edu.tr'dir. Prof. Dr. Ahmet Bey ile görüsecegiz. Daha sonra Arş. Gör. Özlem hanım da katılacak bize.  Enflasyonda 1.6 oranında artıs var.

Şimdi paragrafın farklı araçlar tarafından nasıl cümlelendiğini inceleyelim. Okumaya devam et

Türkî Diller için Doğal Dil İşleme Kütüphanesi: Nüve

İnsan dili veya doğal dil günlük yaşantımızdaki en önemli iletişim kanalımız. Bilgiyi doğal dil biçiminde duyarak ya da okuyarak beynimize alır (input) , beynimizde işler (processing) ve yazılı ya da sözlü olarak dışarı aktarırız (output). İletişim organlarımız ile birlikte beynimiz, bu işi mükemmel biçimde yerine getirirken bilgisayarlar doğal dili işleyebilme konusunda henüz emekleme aşamasındalar. Yine de son 10 yıldır günlük yaşantımızda giderek artan biçimde doğal dil işleme tabanlı uygulamalardan istifade ediyoruz. MS Word gibi kelime işlemciler imla denetimi yaparken, Google Translate gibi uygulamalar otomatik çeviri yapıyor. E-posta hizmeti sağlayıcıları e-postalarımızın istenmeyen (spam) olup olmadığını bizim okumamıza gerek kalmadan tespit edebiliyor. Milyonlarca kullanıcının tweet ya da yorumlarını tek tek okumak zorunda olmadan bir ürün, kişi ya da kurum hakkındaki genel kanaati otomatik olarak tespit edebiliyoruz. Okumaya devam et

Linux’ta Toplu Dosya İsimlendirme

Bir klasördeki çok sayıda dosyanın ismini dizisel biçimde 01.txt, 02.txt olarak değiştirmeniz gerektiğinde aşağıdaki komutu kullanabilirsiniz:

find *.txt |
 
gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.txt\n", $0,  a++ }' |
 
bash

-name parametresinden sonraki ‘.txt’ değeri yalnızca txt uzantılı dosyaların isimlerinin değiştirileceğini belirtir.
%04d.txt ifadesi ise 4 haneli olarak, yine txt uzantılı isimler verileceğini belirtir. 0001.txt, 0002.txt gibi.

Mesela uzantısına bakmaksızın tüm dosyaları 2 haneli (dosyalarımızın sayısı 100′den az ise) ve .dat uzantılı olarak isimlendirmek istersek:

find * |
 
gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %02d.dat\n", $0,  a++ }' |
 
bash

Eğer .txt uzantılı dosyalar haricindeki tüm dosyaları html olarak değiştirmek istersek:

find \! -name *.txt |
 
gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %02d.html\n", $0,  a++ }' |
 
bash

Uyarı: Kullanmadan önce mutlaka dosyalarınızın bir yedeğini alın!

Yazıyı bitirirken, bu tür linux komutlarına çok hakim olmadığımı belirteyim. Zaman zaman ihtiyaç duyduğumda bakabilmek için buraya yazıyorum. Umarım sizlerin de işini kolaylaştırır.

Kaynak: http://stackoverflow.com/questions/3211595/renaming-files-in-a-folder-to-sequential-numbers

Java OutOfMemoryError için Netbeans JVM Ayarları

Yaklaşık 650 MB’lık bir text dosyasını okumaya çalışınca aşağıdaki hatayı aldım:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Java sanal makinesi varsayılan olarak 256 MB maksimum bellek ayırıyor. Programınız ihtiyacı bunun üzerinde olunca yukarıdaki hatayı alıyorsunuz. Ancak JVM’ye aşağıdaki komutlarla ilk ve maksimum bellek miktarını belirtebiliyorsunuz.

java -Xmx2048m -Xms256m Okumaya devam et

Visual Studio’da Projeye Gömülü Kaynak Eklemek

C#’ta yazmakta olduğum kütüphane bazı bilgileri dosyadan okuyor. Kütüphanenin dll’ini dağıtırken bu dosyanın da dll’e gömülü (embedded) olmasını istiyorum. Bu tür dosyalara kaynak dosyalar (resources) ismini verebiliriz. Kaynak dosyaların yalnızca okuma yapmak için kullanılabileceğini, yazma yapılamayacağını (readonly) hatırlattıktan sonra bunun nasıl yapılabileceğine geçelim:

1- Öncelikle kaynak dosyayı projeye dahil etmek için  projemize “Resources” isimli bir klasör açalım. Okumaya devam et

Türkçe Fiil Çekimleri Uygulaması

Türkçe fiillerin çekimlerini otomatik üreten bir programı kodlamayı uzun zaman önce düşünmüştüm. O zamandan beri vakit buldukça azar azar geliştirdiğim uygulamanın ilk sürümünü sonunda yayınlayabildim. Uygulama bu hali ile kime ne kadar fayda sağlar bilemiyorum. Ama ileriki sürümlerinin ilk-orta-lise öğrencilerine ve Türkçe öğrenmek isteyen yabancılara yararlı olmasını hedefliyorum. Bu bağlamda sizin de görüş ve önerilerinizi bekliyorum:

http://fiilcek.apphb.com/

Teknik detaylara gelecek olursak:

Uygulama Asp.Net (C#) ile yazıldı ve AppHarbor bulutu üzerinde çalışıyor. Java ve Ruby için de benzer bir platform (PAAS) sağlayan Heroku bulutu var. AppHarbor basit kullanımlarda ücretsiz ve Github, BitBucket gibi ortamlardaki kodunuzu otomatik çekip, derleyip yayınlayabiliyor.

Şimdilik olumsuz çekimler yok, soru çekimleri, edilgen ve ettirgen fiiller yok. Ve bu en sade haliyle bile bir fiil için tam 197 adet çekim dönüyor. Bir de bunları ekleyince arayüzün hala sade ve anlaşılır olmasını nasıl sağlayacağım bilemiyorum :)

Uygulamanın faydalı olması dileğiyle.

Windows Netbeans Maven Türkçe Karakter Problemi

Windows’ta Netbeans ile yeni bir Maven projesi açtığınızda Türkçe karakterlerin doğru görüntülenmediğini farkettim. Yaklaşık 3 saat süren çabalardan sonra bulabildiğim tek çözüm:

System.out.println( "ÇİĞÇŞÜçığöşü--" );

kodunun çıktısı

Ç??Ç?Üç??ö?ü--

şeklinde görünüyor. Aynı şey dosyaya yazma yaparken de geçerli. Görebildiğim kadarıyla bu henüz çözülmemiş bir bug. Sorunun Netbeans’ten kaynaklandığını teyid etmek adına aynı kodu IntelliJIdea ile de çalıştırdım ve sorun olmadığını gördüm. Aynı şekilde linux ortamındaki Netbeans de sorunsuz çalışıyor. Lafı fazla uzatmadan işe yarayan tek çözümü açıklayayım: Okumaya devam et

Türkçe Metinlerin Sınıflandırılması için Deney Ortamı: Prizma

Bundan önceki metin sınıflandırma çalışmamızı kısaca özetleyerek başlayalım. 10 yazara ait 100’er köşe yazısı toplamış bunlardan bir kısmı ile sistemi eğitmiş diğer kısmını ise test için kullanarak köşe yazılarını yazarlarına göre sınıflandırmaya çalışmıştım. Bunun için yazdığım Java kodu her bir yazıdan 13 adet nitelik (attribute) değeri çıkarıyordu. Mesela ortalama kelime uzunluğu, cümle uzunluğu, noktalama işareti kullanım oranı bu niteliklerden bazılarıydı. Sonuçlar ise %95 oranında isabetliydi. Rakamlarla konuşmak gerekirse 10×100 = 1000 köşe yazısından 50×10= 500 adedini eğitim (training) için kullandığımızda kalan 500 yazıdan yaklaşık 475 kadarının hangi yazara ait olduğu doğru şekilde tahmin edilebiliyordu. Okumaya devam et