Rss Feed
LinkedIN
FriendFeed
Twitter
Facebook

Java ile Sözlük Uygulaması

Posted: December 13th, 2008 | Author: Ahmet Kakıcı | Filed under: Programlama | Tags: , | 19 Comments »

Çok mükemmel bir sözlük değil ama örnek olması açısından işe yarayacağını düşünüyorum. Düzenli ifadeler ile arama yapan bir sözlük denemesi hani şu yazmaya başladığınızda arama yapanlardan. Sözlük herhangi bir veri tabanı kullanmıyor sadece bir txt dosyasından okuma yapıyor. kelimeler.txt adında bir dosya oluşturup içine istediğiniz kelimeleri girebilirsiniz. Ancak formatı şu şekilde olmalıdır : İngilizce\tTürkçe. İngilizce kelime ardından bir tab karakteri ve sonra türkçe anlamı gelmelidir. Kendi kullandığım kelimeler.txt dosyasını da örnek olsun diye veriyorum. Dosyaya dilediğiniz gibi kelime ekleyip çıkarabilir hatta okuma kaynağını değiştirip herhangi bir sitden vs arama da yapabilirsiniz diyor ve kodu sunuyorum:

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.awt.datatransfer.Clipboard;

public class SozLook extends JFrame implements ActionListener,KeyListener
{

public File dosya;					//Kelimelerin okunacağı dosya
public FileReader acilan_dosya;
public BufferedReader girdi;
public String yazilar="";			//Dosyadan okunan veriler
public int myIndex;					//TR->ING  ING->TR çevrim türünü tutuyor

public JTextField Word;				//Kelime girilen TextField
public JTextField Sonuc;			//Sonucu gösteren TextField
public JPanel myPanel1,myPanel2;

public JList list;					//Seçim listesi
public JListData ldata;

public JRadioButton trButton,ingButton;
public ButtonGroup 	myGroup;

public String urlString;
public String gelen;
public Boolean bulundu=false;
public Pattern urlPattern;
public Matcher urlMatcher;

public void init()
{
Container container = getContentPane();
container.setLayout(new BorderLayout(25,5));

myPanel1 = new JPanel();
myPanel1.setLayout(new BorderLayout(25,5));

myPanel2 = new JPanel();
myPanel2.setLayout(new FlowLayout());

Word = new JTextField(25);
Word.addKeyListener(this);

Sonuc = new JTextField(50);
Sonuc.setEditable(false);

ingButton = new JRadioButton("İngilizce -> Türkçe", true);
trButton  = new JRadioButton("Türkçe -> İngilizce", false);
trButton.addActionListener(this);
ingButton.addActionListener(this);

myGroup= new ButtonGroup();
myGroup.add(trButton);
myGroup.add(ingButton);

myPanel2.add(ingButton);
myPanel2.add(trButton);
myPanel1.add(Word,BorderLayout.NORTH);
myPanel1.add(Sonuc,BorderLayout.SOUTH);

JScrollPane sp = new JScrollPane();
myPanel1.add("Center", sp);

ldata = new JListData();
list= new JList(ldata); 	//data verisiyle yeni liste oluşturuyor
sp.getViewport().add(list); //scrollpane

container.add(myPanel1,BorderLayout.CENTER);
container.add(myPanel2,BorderLayout.SOUTH);

setSize(500,300);
setResizable(false);

list.addMouseListener(new MouseAdapter()
{
public void mouseReleased( MouseEvent e )
{
if(!list.isSelectionEmpty())
elemanSecildi();
}
}
);

}

public SozLook()
{
super("SözLook - KTÜ");
init();
setVisible(true);
}

public static void main(String args[])
{
new SozLook();
}

public void actionPerformed( ActionEvent actionEvent )
{
Sonuc.setText("");
ldata.temizle();
ldata.addElement("");
list.disable();
harfYazildi();
return;
}

public void keyPressed( KeyEvent event )
{
}
public void keyTyped( KeyEvent event )
{
}
public void keyReleased( KeyEvent event )
{
harfYazildi();
}

public void harfYazildi()
{
Sonuc.setText("");
if(Word.getText().toLowerCase().length()==0)
{
ldata.temizle();
ldata.addElement("");
list.disable();
return;
}

bulundu=false;
ldata.temizle();
list.enable();
list.clearSelection();

if(ingButton.isSelected())
urlString ="^"+Word.getText().toLowerCase()+"[^\t]*";
else
urlString ="\t"+Word.getText().toLowerCase()+".*$";

bul(0);
}

public void elemanSecildi()
{
if(ingButton.isSelected())
{
urlString ="^"+list.getSelectedValue().toString()+".*\t.*";
myIndex=1;
}
else
{
urlString ="^.*"+list.getSelectedValue().toString()+".*$";
myIndex=0;
}
bul(1);
}

public void bul(int tur)
{
try
{
dosya = new File( "kelimeler.txt" );
acilan_dosya = new FileReader ( dosya );
girdi = new BufferedReader ( acilan_dosya );
urlPattern = Pattern.compile(urlString);

while ( (yazilar=girdi.readLine()) != null )
{
urlMatcher = urlPattern.matcher(yazilar);
if(urlMatcher.find())
{
if(tur==0)	//harfe göre kelime aranıyor
{
bulundu=true;
ldata.addElement(urlMatcher.group());
}
else		//listeden seçilen kelimenin karşılığı aranıyor
{
String [] bulunan=urlMatcher.group().split("\t");
Sonuc.setText(bulunan[myIndex]);
break;
}
}
if(yazilar.toLowerCase().toCharArray()[0]>Word.getText().toLowerCase().toCharArray()[0])
break;
}

if(tur==0 && !bulundu)
{
ldata.addElement("");
list.disable();
return;
}

}
catch ( IOException exception )
{
System.out.println("Dosyadan okurken hata oluştu");
}
finally
{
try
{
girdi.close();
}
catch( IOException exception )
{
System.out.println("Dosya kapatılırken hata oluşturuldu.");
}
}

}

}

class JListData extends AbstractListModel {
private Vector dlist;

public JListData()
{
dlist = new Vector();
makeData();
}
public int getSize()
{
return dlist.size();
}
private Vector makeData()
{
dlist = new Vector();
return dlist;
}
public Object getElementAt(int index)
{
return dlist.elementAt(index);
}
public void addElement(String s)
{
dlist.addElement(s);
fireIntervalAdded(this, dlist.size()-1, dlist.size());
}
public void temizle()
{
dlist.clear();
}
}

Benzer yazılar:

  1. Java ile Sohbet Programı
  2. C# ile Görüntü İşleme – 3
  3. Java Soket Programlama – NetBeans Projesi


19 Comments on “Java ile Sözlük Uygulaması”

  1. 1 serkan said at 00:13 on December 19th, 2008:

    ahmet bu web üzerindede çalışır değil mi ?

  2. 2 Ahmet Kakıcı said at 16:09 on December 19th, 2008:

    applet olarak yazmadım ama düzenlersen web üzerinden de çalışır :)

  3. 3 Yasin said at 18:27 on December 30th, 2008:

    Süpermiş, kodu çok incelemedim ama Türkçe karakter sıkıntısının olmaması güzel. Bunu parse edip veritabanına atmamız mümkün olur mu acep?

  4. 4 Ahmet Kakıcı said at 22:19 on December 30th, 2008:

    Veritabanına neyi atacağını anlayamadım? Kelimeleri veri tabanından çekeceksen sorgu manyağı olursun :) Her tuşa basışta bir sorgu… Ama eğer yazdıktan sonra bir buton ile arama yaparsan (ki daha mantıklı) gayet güzel çalışır ;)

  5. 5 Yasin said at 21:28 on December 31st, 2008:

    Peki Seslisozluk.com gibi Ajax uygulamalarında da sonuçta veritabanı kullanılmıyor mu? “sorgu manyağı” olmanın dezavantajı ne? :)

  6. 6 Ahmet Kakıcı said at 20:50 on January 1st, 2009:

    Her harfe basıldığında bir sorgu yapılması sunucuyu epey yorar diye düşünüyorum. Ancak seslisozluk yapmış, ve bu kadar popüler olmasına rağmen sorun çıkarmıyorsa demek ki yapılsa da oluyormuş :)

  7. 7 Recep Hilmi Tufan said at 23:10 on January 3rd, 2009:

    Merhabalar;

    Bu kodlama, programlara işlerine çok uzağım şu an. Daha yavaş yavaş Web tasarımından başladım işe. Ben İtalyan dili okuyorum. Acaba ben bu bahsettiğiniz sözlüğü İtalyanca-İngilizce-Türkçe sözlük şeklinde kullanabilir miyim? Veya siz benim için böyle bir şey yapabilir misiniz, tabii vaktiniz varsa.

    Saygılarımla…

  8. 8 Ahmet Kakıcı said at 23:58 on January 3rd, 2009:

    Kelimelerin bulunduğu dosyaya İngilizce\tTürkçe yerine İtalyanca\tTürkçe şeklinde yazarak italyanca < -> türkçe sözlük yapabilirsiniz.

  9. 9 Olgun Kaya said at 01:00 on January 26th, 2009:

    amet :) siteyi yeni keşfettim iyi yazıların var tebrikler. ama şu sözlüğe yalandan iki üç tane class koysaydın ne lan bu benim applet gibi :D tek class kökle gitsin.

    Şaka bir yana eline sağlık..

  10. 10 Ahmet Kakıcı said at 01:07 on January 26th, 2009:

    birden fazla sınıfa ihtiyaç duyacak kadar karmaşık bir iş değildi :) şu bitirme ödevimdeki yapay sinir ağını bir yazayım o zaman gör bak kaç sınıf olacak :)

    Şaka bir yana teşekkür ederim.

  11. 11 Olgun Kaya said at 10:20 on January 26th, 2009:

    Programda olsa sınıf ayrımına hayır diyerek bitiriyorum :D

  12. 12 Ahmet Kakıcı said at 10:27 on January 26th, 2009:

    Tam yerinde bitmiş :) Bu tarzda devamı gelse pek iyi olmaycacaktı :)

  13. 13 Tutku said at 20:31 on May 20th, 2009:

    Tam da dönem ödevimim için gerekli kodlar:) Saolun.

  14. 14 Özkan said at 14:30 on June 25th, 2009:

    Kardeş gerçekten çok teşekkür ederim.Programlama ile ilgili yazılarının devamını bekiyoruz

  15. 15 ibrahim said at 18:57 on October 19th, 2009:

    ben cep telefon için sözlük hazırlıyorum bana yardımcı olurmusununz teşekürler

  16. 16 fatma said at 23:57 on January 15th, 2010:

    meraba.Ben kodunuzu yazdım ama şu kısmını anlamadım zaten orda hata verdi

    if(tur==0 &amp;amp;&amp;amp; !bulundu)

  17. 17 Ahmet Kakıcı said at 00:25 on January 18th, 2010:

    Fatma kodun o kısmı blog’un azizliğine uğramış.

    if(tur==0 && !bulundu)
    olacaktı aslında.

  18. 18 Mehmet said at 19:01 on January 24th, 2010:

    Ya hocam ben de java ya yeni yeni başladım .
    bu .txt dosyasını nereye atacaz da gorecek bu java ?
    Yeni başladığımdan mazur gör.

  19. 19 Ahmet Kakıcı said at 00:08 on January 25th, 2010:

    Programın class dosyası ile aynı klasöre koyman yeterli. Aksi halde dosyanın tam yolunu (c:\….) gibisinden de verebilirsin.


Leave a Reply