Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Benzer konu mantığı

ploop

0
Onaylı Üye
Üye
Katılım
11 Ekim 2004
Mesajlar
6,964
Açılan Konu
214
Tepki puanı
0
Konum
karavan
Selam,
Su an benzer konu mantığı için çok amelece bir yöntem izliyorum, performans açısında -10 veriyorum hatta. Bana daha iyi bir performans sağlayacak kodun kulu köpeği olurum.

Su an yaptığım: Atıyorum cümlemiz "At esek kuslara bakarak su içiyor".. Ben su an bu cümleyi bölüyorum, her biri için sorgu yaptırıyorum. Bunun illaki kolay yolu vardır, nedir acaba?
 

Bumber

0
Onaylı Üye
Üye
Katılım
15 Şubat 2008
Mesajlar
216
Açılan Konu
0
Tepki puanı
1
Konum
Istanbul
soundex değilde, fulltext kullanılıyor herhalde, tam bilgi sahibi olmasamda fulltextide araştırmanı öneririm, zira benzerlik oranı filan veriyor fulltext
 

ploop

0
Onaylı Üye
Üye
Katılım
11 Ekim 2004
Mesajlar
6,964
Açılan Konu
214
Tepki puanı
0
Konum
karavan
soundex değil sanırım benim dediğim, çünkü benim amacım sudur:

"At esek kuslara bakarak su içiyor" bu cümleyle benzer olan cümleleri bulmak. Yani içerisinde esek geçen olur, bakarak olur vs.. Örnek olarak:

- Esek camdan bakıyor: Benzer cümle olarak listelenmeli.
- Geyik kafalı: Benzer cümle olarak listelenmemeli.
 

Angelo

0
Onaylı Üye
Üye
Katılım
13 Aralık 2004
Mesajlar
9,603
Açılan Konu
164
Tepki puanı
106
Konum
AZ
Karakter bazlı evet. Benim bildiğim kelime bazlı çalışanı yok. Ekşi sözlüğü ele alırsanız mesela sanırım karakter bazlı bakıyor. Cramier yazın Cramer filan çıkıyor. Onyüzbinlerce kayıt yoksa, kayıtları elle ilişkilendirmek de bir seçenek olabilir. Yeni kayıt girerken, ilgili kayıtlar diye yeni bir alan açıp oraya girmek gibi.
 

ploop

0
Onaylı Üye
Üye
Katılım
11 Ekim 2004
Mesajlar
6,964
Açılan Konu
214
Tepki puanı
0
Konum
karavan
Ama iste benim istediğim o değil tam olarak, cümlelerin benzerliğini bulmaya çalısıyorum :) Aslında like benim istediğimi veriyor gibi ama performans sorunu yasar mıyım bilmiyorum :p
Biraz daha arastırmaya devam edeyim..
 

Ozcan

0
Onaylı Üye
Üye
Katılım
12 Mayıs 2007
Mesajlar
3,749
Açılan Konu
428
Tepki puanı
61
Konum
Antalya
bence şu şekilde dene :) hem mantıklı sonuçlar verir.

At+esek+kuslara+bakarak +su+içiyor =6
At+esek +kuslara+bakarak+su =5
At +esek +kuslara+ bakarak+ içiyor =5
At +esek +kuslara +su +içiyor =5
At +esek +bakarak +su+ içiyor =5
At +kuslara+ bakarak+ su +içiyor =5
esek+ kuslara+ bakarak +su +içiyor =5
At+esek+kuslara+bakarak =4
At+esek+kuslara+içiyor =4
At+esek+kuslara+su+ =4
At+esek+bakarak +su+içiyor =4
At+esek+kuslara+su+içiyor =4
At+kuslara+bakarak +su+içiyor =4

bu şekilde aramalar yaparsan konuya çok yakın sonuçlar çıkar bende kodu yazabilsem kendi sitelerimdede kullanıcam array lerle çok güzel işler yapan bi arkadaşımız vardı eğer bu şekilde bir fonksiyon oluşturabilirse çok güzel olur yani ilk önce cümleyi arayacak sonra cümleden bir kelime çıkarıp sonra iki kelime çıkarıp en sonda 3 kelime kalana kadar devam ederse güzel olur hem bağlantılı şeylerin çıkma olasılığı çok yüksek olur yani

1- select * from tablo where yazi LIKE '%at%' and yazi LIKE '%esek%' and yazi LIKE '%kuslara%' and yazi LIKE '%bakarak%' and yazi LIKE '%su%' and yazi LIKE '%içiyor%'



2- select * from tablo where yazi LIKE '%at%' and yazi LIKE '%esek%' and yazi LIKE '%kuslara%' and yazi LIKE '%bakarak%' and yazi LIKE '%su%'



3- select * from tablo where yazi LIKE '%at%' and yazi LIKE '%esek%' and yazi LIKE '%kuslara%'


bunu gibi :) yani
6 kelime için 1 sorgu
5 kelime için 6 sorgu
4 kelime için 36 sorgu
3 kelime için 126 sorgu gibi

Not : Hesaplamadan yazdım rakamları ama yaklaşık okadar oluyodur.
 

ploop

0
Onaylı Üye
Üye
Katılım
11 Ekim 2004
Mesajlar
6,964
Açılan Konu
214
Tepki puanı
0
Konum
karavan
ama zaten direk cümleleri like ile karsılastırabiliyorsun, virgül olunca çalısmıyor ama. Ben denedim, cümleler içerisinde ortak kelime 1 tane olsa da gösteriyor :)
 

Ozcan

0
Onaylı Üye
Üye
Katılım
12 Mayıs 2007
Mesajlar
3,749
Açılan Konu
428
Tepki puanı
61
Konum
Antalya
işte bende diyorum ki ilk önce 6 kelimede ortak olan yazıları listelet

select * from tablo where yazi LIKE '%kelime1%' and yazi LIKE '%kelime2%' and yazi LIKE '%kelime3%' and yazi LIKE '%kelime4%' and yazi LIKE '%kelime5%' and yazi LIKE '%kelime6%'

bu sorgu ile en çok benzer yazılar çıkacakya :) boş olma olsılığıda çok yüksek bunun için de diyorum ki bu sorgudan sonra

select * from tablo where yazi LIKE '%kelime1%' and yazi LIKE '%kelime2%' and yazi LIKE '%kelime3%' and yazi LIKE '%kelime4%' and yazi LIKE '%kelime5%'

5 kelime için yeniden ara deniyeceksin senin cümlende 6 kelime olduğu için 6 kere kelimeler için ayrı ayrı çalıştırıp çıkanı ilk sorguda bulunanların altına ekliyeceksin.

bu şekilde yani 2. sorgu 6 sorgu olacak yani.
kelime1 +kelime2 +kelime3 +kelime4 +kelime5
kelime1 +kelime2 +kelime3 +kelime4 +kelime6
kelime1 +kelime2 +kelime3 +kelime5 +kelime6
kelime1 +kelime2 +kelime4 +kelime5 +kelime6
kelime1 +kelime3 +kelime4 +kelime5 +kelime6
kelime2 +kelime3 +kelime4 +kelime5 +kelime6

bu şekildede benzer kelimeler çok az olacağı için bunu 4 kelimeliler için denemek lazım
kelime1 +kelime2 +kelime3 +kelime4
kelime1 +kelime2 +kelime3 +kelime6
kelime1 +kelime2 +kelime3 +kelime5
kelime1 +kelime2 +kelime4 +kelime5
kelime1 +kelime2 +kelime4 +kelime6
kelime1 +kelime2 +kelime3 +kelime4 diye uzayıp gidiyor :) işte bunu yapabilecek bir fonksiyon oluşturmak lazım. bu 4 kelime benzerlerinden sonuç çıkma olasılığı olabilir.

bende bu kodu denedim ve gayet güzel çalışıyor sadece iki sonuç çıktı sanırım sen bi yerde yalnışlık yapıyorsun yada kelimeleri tek tek aratıyorsun tek tek değilde grup grup aratırsan az ve benzer sonuçlar çıkar.

Denedim çalışıyor.

PHP:
select * from tablom where alan LIKE '%kelime%' and alan LIKE '%kelime2%'
 

ploop

0
Onaylı Üye
Üye
Katılım
11 Ekim 2004
Mesajlar
6,964
Açılan Konu
214
Tepki puanı
0
Konum
karavan
$cumle = "$kelime1 $kelime2 $kelime3 $kelime4";
$cumle2 = "$kelime1 $kelime5 $kelime6";
mysql.. baslik like '%$cumle%' dediğimizde $cumle2 yi de zaten cevap olarak veriyor bize. Yani ayrı ayrı sorgulamaya gerek yok. Ben mi senin dediğini anlamıyorum acaba yahu.
 

Ozcan

0
Onaylı Üye
Üye
Katılım
12 Mayıs 2007
Mesajlar
3,749
Açılan Konu
428
Tepki puanı
61
Konum
Antalya
:) ben anlatamadım heralde bi daha deniyim.

İÇERİK 3 FORUM İYİNET PHP WEBMASTER GOOGLE ADSENSE

Benzer içerik için

İki içerik olsun sitemizde

İÇERİK 1 FORUM ÇOK İYİNET GÜZEL WEBMASTER BURADA GOOGLE

İÇERİK 2 FORUM AZ İYİNET HOŞ ADSENSE NEREDE GOOGLE


PHP:
select * from tablom where alan LIKE '%FORUM%' and alan LIKE '%İYİNET%'
  and alan LIKE '%ADSENSE%'  and alan LIKE '%GOOGLE%'

bu şekilde sadece 2. sonuç çıkar.

PHP:
select * from tablom where alan LIKE '%FORUM%' and alan LIKE '%İYİNET%'
  and alan LIKE '%GOOGLE%'
bu şekilde 2si birden çıkar.
 

ploop

0
Onaylı Üye
Üye
Katılım
11 Ekim 2004
Mesajlar
6,964
Açılan Konu
214
Tepki puanı
0
Konum
karavan
sabaha kadar yazarız karsılıklı :) Diyelim ki 2 tane içeriğimiz var sitemizde..

FORUM ÇOK İYİNET GÜZEL WEBMASTER BURADA GOOGLE
FORUM ÇOK İYİNET GÜZEL ADSENSE BURADA GOOGLE

Bu 2 içeriğimizin asağıdaki baslıktaki sayfamıza girdiğimizde benzer içerik olarak görünmesini istiyoruz, ki benim en büyük amacım bu:

$icerik1 = "FORUM İYİNET PHP WEBMASTER GOOGLE ADSENSE";

select * from tablom where alan like '%$icerik1%' diye bir mysql query, bize benzer baslık olarak yukarıdaki 2 baslıktaki içeriği sunacaktır zaten. Ekstra kod yükü var gibi seninkinde :)
 

Ozcan

0
Onaylı Üye
Üye
Katılım
12 Mayıs 2007
Mesajlar
3,749
Açılan Konu
428
Tepki puanı
61
Konum
Antalya
bloop çok uykum geldi mantık şu olcak :)

PHP:
<?php


$kelime='FORUM İYİNET PHP WEBMASTER GOOGLE ADSENSE';

$sql_where = "SELECT * FROM tablo where ";
$parcala = explode(' ', $kelime);
for($i=0; $i<count($parcala); $i++){
$etiketle = trim($parcala[$i]);
if ($i=='0') { $sql_where .= " alan LIKE '%$etiketle%'";} else {
$sql_where .= " and  alan LIKE '%$etiketle%'"; }
}
echo $sql_where;

?>

yarın devam ederiz. bu kod ile 6 kelimeyi birden alıyor bunu rast gele 4ünü alacak şekilde değiştirebilirsen iyi olur yada yarın uğraşırız. Yai o 6 kelimenin içinde her hangi 4ü geçeni benzer olarak görür.
 

ploop

0
Onaylı Üye
Üye
Katılım
11 Ekim 2004
Mesajlar
6,964
Açılan Konu
214
Tepki puanı
0
Konum
karavan
Bugün çok yoğunum, isim biter bitmez bu konuyla ilgileneceğim; tesekkür ettim.
 
Üst