6 Haziran 2012 Çarşamba

Basit Arama Motoru Yapımı

Bir web sitesi işi için arama motoru istemişlerdi. Kendim arama motoru yapmayı denedim ve güzel bilgilendirici bir çalışma oldu.

Bir tane alan adını (domain) kapsayacaktı.
Windows uygulaması olarak tarayıcı ve endekleyici(crawler-indexer) yaptım.
2 temel veretabanı tablosu oluyurdu: "Sayfalar" tablosu alan adı altındaki tüm sayfaları saklıyordu.
"Kelime" tablosu anahtar kelime(keyword) tablosu idi. Anahtar kelimenin hangi sayfada kaç kere bulunduğu tablo idi.

Program sitenin ana sayfasından taramaya başlıyordu.
Sayfadaki bağlantı(link) etiketlerini ( <a href=" ...   ,  <iframe src=".... ) bulup bunu elemeden sonra veritabanına atıyordu.
burada xml okuyucu sınıfı yazımı  (  bağlantı içerebilecek etiket başlangıçları tespiti ve içinin ilgili kısmını okuma)

 ve
bağlantı isimlerini düzeltme işlemi ( mesela href="../haberler/index.html" bağlantısını  http://www.abc.com/haberler/index.html hale getirmek)  vardı.

Alan adı dışına giden bağlantılar eleniyordu. Resim, doküman vb. web sayfası olmayan bağlantılar eleniyordu.
Elemeden geçen bağlantı eğer veritabanında daha önce eklenmemişse veritabanına ekleniyordu.

Sonra sırayla bulunan bağlantılara gidilip yukarıdaki işlem tekrarlanıyordu.
Dolayısıyla dallanan bir bağlantı ağacı oluşuyordu.
Bu noktada kırık bağlantılarda tespit ediliyordu.

"Sayfalar" veritabanı oluştuktan sonra, Sayfaları tek tek gezip içeriklerini okuma kısmı geliyordu.

Burada da yine xml sınıfı kodu ile ilgili etiketler tespit edilip metin kısmı okunuyordu.
Burada okunan metinler tek tek kelimelere ayrılıp, hepsi küçük harfle olacak şekile getiriliyordu.
Çok tekrar eden ve aranması beklenmeyen kelimeler eleniyordu. Örnek "ve, bu, şu, o ... vb." gibi kelimeler eleniyordu.
Bulunan kelimeler "Kelime" tablosuna sayfa ve adet(kaç kere sayfada bulunma) bilgisi ile ekleniyordu.

Bundan sonrası zaten arama motoru sayfası oluşturmak idi.
Aranan kelime "Kelime" tablosunda adet kısmı azalan olacak şekilde okunuyordu.

Çoklu kelime aramalarında ise kelimelerin hepsinin bulunduğu sayfalar ön sırada gösteriliyordu.
mesela aranan kelime "güzel resim" olsun. Diyelim ki A sayfasında "güzel" kelimesi 10 kere geçiyor. B sayfasında "güzel" ve "resim" kelimeleri 3 kere geçiyor. C sayfasında "resim" kelimesi 8 kere geçiyor.
İlk sırada B sayfası sonra A ve C sayfaları listeniyordu.

Sadece web sayfalarını taradım. Tabi ki doc, pdf lerde taranabilir. Aynı şekilde anahtar kelimesi tablosunda bu dosya türleri de eklenbilirdi.

Hiç yorum yok:

Yorum Gönder