Merhaba arkadaşlar, Yazılım dilimi geliştirmek için bir arama motoru yazıyorum (kendi çapımda) Örümcekler 1-2 aksaklık olsada bitti. Şimdi arama algoritması geliştiriyorum ama aklıma takılan bir sorun var.
Örnek ben 3 alanda arama yapıcam (title,desc,keyword) kişi "Webmaster" diye arattığında, bu 3 ün dede arama yapacak ve alakaya göre sıralayacak. (Buraya kadar yaptım) Takıldığım nokta ise, Örnek title ye 100 üzerinden 60 önem vericem. desc e 10 ve keyword ada 30. Yani verdiğim değere göre site sıralaması yapılacak.
Bu konu hakkında acaba bi fikri olan var mı ?
2. Olarak
Yaptığım örümcekler indexliyor ama bazı sitelerin title des ve keywordları karakter hatalı oluyor. Tamamen nasıl bu karakter hatalarını filtre edebilirim ?
Değer'e Göre Sıralama
5
●651
- 07-12-2010, 22:48:04Üyeliği durdurulduÖncelikle arama motoru yaperken veritabanı ayarlarını temiz ve anlaşılır şekilde yapmaya önem gösretim.
meta tag almak için
<?php // Assuming the above tags are at www.example.com $tags = get_meta_tags('http://www.example.com/'); // Notice how the keys are all lowercase now, and // how . was replaced by _ in the key. echo $tags['author']; // name echo $tags['keywords']; // php documentation echo $tags['description']; // a php manual echo $tags['geo_position']; // 49.33;-86.59 ?>hazır fonksiyon var.
diğer bir özellik ise , zincirleme link toplamak.
site içerisindeki tüm linkler toplanır bu linkler kayıt edilirken meta bilgileri alınır.
yani r10.net sitesine bağlandık tüm linkleri aldık ve dış bağlantı linklerinide aldık.
extra olarak h1 h2 taglarıda alınabilir.
karakter hataları için preg replace ve türevleri kullanılabilir regex ile sorunu en aza indirebilirsiniz.
sizde ufak bir algoritma kurarak sitelere belirli önem verebilirsiniz.
mesela title şu kurala uyuyorsa 10 , uymuyorsa 5 vs vs
sıralama yaparken verilen sıraya göre listelersiniz. - 07-12-2010, 23:23:43İlk önce yardımınız için çok teşekkürler, Peki sorumu biraz daha değiştireyimBHCoder adlı üyeden alıntı: mesajı görüntüle
Peki 10 üzerinden puanlama yaptım diyelim, Arama yapıldığında o adresin aldığı puanı nasıl sıralamaya katabilirim ?
+ Önerdiğiniz başka şeyler var ise dinlemek isterim. - 08-12-2010, 02:49:281. Bu sıralama işlemini direkt SQL sorgusu ile de yapabilirsiniz. MySQL da bir sürü string fonksiyonları vardır (bkz. http://dev.mysql.com/doc/refman/5.0/...functions.html). Select kısmında gerekli işlemleri yaparak order by ile istediğiniz gibi sıralayabilirsiniz.
2. Yok ben veriler tek tek çekiyorum. Sıralamayı PHP ile yapmak istiyorum derseniz. Alttaki örnek fonksiyonu kullanabilirsiniz. Veri yapınızın uyacağını umuyorum
/* db den çekilen ve puan verilen veriler */ $data = array( /* 1. veri */ array( 'title' => 'Title bir', 'site' => 'Site bir', 'point' => 4, ), /* 2. veri */ array( 'title' => 'Title iki', 'site' => 'Site iki', 'point' => 2, ), /* 3. veri */ array( 'title' => 'Title üç', 'site' => 'Site üç', 'point' => 9, ), ); // http://www.php.net/manual/en/function.sort.php#99700 function array_sort($array, $on, $order='SORT_DESC') { $new_array = array(); $sortable_array = array(); if (count($array) > 0) { foreach ($array as $k => $v) { if (is_array($v)) { foreach ($v as $k2 => $v2) { if ($k2 == $on) { $sortable_array[$k] = $v2; } } } else { $sortable_array[$k] = $v; } } switch($order) { case 'SORT_ASC': asort($sortable_array); break; case 'SORT_DESC': arsort($sortable_array); break; } foreach($sortable_array as $k => $v) { $new_array[] = $array[$k]; } } return $new_array; } echo '<pre>'; print_r(array_sort($data, 'point', 'SORT_DESC')); - 08-12-2010, 08:41:40Şöyle yapabilirsin sanırım. Siteyi botlar indexlerken title ı alır. Kelimelere böler. sonra bu kelimeleri birerli, ikişerli, üçerli kombinasyonlar halinde descriptionda, keywordsde, metin içinde arar.
Titlede zaten bulunacaktır. 60 standart puanla başlar fonksiyon, descriptionda aynı kelime ya da kelime grubu aynı şekilde geçiyorsa 10 puan daha, keywordsde geçiyorsa 30 puan daha, metin içinde strong tagi ile geçiyorsa 5 puan daha, i tagi ile geçiyorsa 3 puan daha underline ise puan daha gibi başka puan türleri de ekleyebilirsin. Çünkü değişkeni ne kadar çok tutarsa 2 sitenin aynı puanı alma şansıo o kadar azalır. Sonra siteye whois çekip site yaşına göre belirlediğin bir sabitin olur. Mesela 5 yaşından büyükse sabitin 1 olur, 3-5 yıl arası ise 0,85 olur, 1-3 arası ise 0,75 olur, 6-12 arası 0,50 olur, 3-6 ay arası 0,40 olur, 1-3 ay arası 0,20 olur. O kelime ya da kelime grubu ile ilgili title description keywords ve metinden alınan puanı site yaşından gelecek sabitle çarparsın. Çıkan puanı, aranan kelime, site, sayfa bilgileri ile veritabanına yazarsın. Arama yapıldığında arana kelime tablosundaki indexten aratır puana göre sıralatırsın.
Peki 10 üzerinden puanlama yaptım diyelim, Arama yapıldığında o adresin aldığı puanı nasıl sıralamaya katabilirim ?