Php ile Ajax Destekli Yapay Zeka Yapalım
Tarih: Temmuz 22nd, 2009 | Yazar: Ertuğrul Erkan | Kategori: Php | Etiketler: botacad, botacad yapımı, konuşan bot, Php, php ile bot, php ile bot yapımı, php ile botacad, php ile konuşan bot, php ile yapay, php ile yapay zeka, php ile zeka, yapay zeka | 12 Yorum »Yapay zekaları bilirsiniz. Önceden tanımlanan bilgileri, yeni öğrendikleri ile birleştirip gerçek bir beyin gibi çalışırlar. Öncelikle tam olarak ne yapacağız bilmeniz lazım. Botacad gibi sanal bir yapay zeka sistemi yapacağız. Kişi aynen muhabbet eder gibi yazacak ve cevabını yapay zekadan alacak.
Bunun için performansı en iyi şekilde düşünmek şart. Herhangi bir araştırma yok yalnız dizileri kullanmak bizim gibi basit işler için en uygun olanı. En azından mantığını ve kodları verdikten sonra siz istediğiniz gibi daha yüksek performanslı duruma çıkabilirsiniz.
Bu iş için üç dil kullanacağız; Jquery, Php ve Css;
index.php içerisinde ki kodlar;
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" ></script>
<link rel="stylesheet" type="text/css" href="stil.css" media="all" />
<script type="text/javascript" src="bot.js" ></script>
<div class="kutu">Sanal Bot ile Konuşun!
<div id="sorular">Bir şeyler yazın;<br /></div>
<form id="konus" name="form1" method="post" action="javascript:void(0);">
<label>
<input name="soru" type="text" id="soru" value="" size="30" />
</label>
<label>
<input type="submit" name="button" id="button" value="Konuş" onclick="sor()"/>
</label>
</form></div>
Bu sayfaya eklenmesi gereken Css dosyası stil.css;
.kutu {
background:#eee;
border: 1px solid #ddd;
padding:10px;
margin-bottom:10px;
height:200px;
weight:200px;
}
#sorular {
height:150px;
padding:10px;
overflow:scroll;
overflow-x:hidden;
}
Yine index.php ye eklenmesi gereken Js dosyası bot.js;
function sor() {
var soru = $("#konus :input").val();
if(soru != '') {
$.post("bot.php",$('#konus').serialize(), function(gelen) {
$("#sorular").append("Misafir:"+soru+"<br />Bot:"+gelen+"<br />");
});
}else{
alert("Birşeyler yazmayı deneyebilirsiniz?");
}
return false; }
Ve son olarak bütün yapının zekası bot.php;
<?php
$soru = htmlspecialchars($_POST["soru"]);
$cevaplar = array("Selam"=>"Sana da selam","Sa"=>"As","Nasılsın?"=>"Teşekkürler siz?");
$anlamadim = array("Anlayamadım?","Afedersiniz?","Bu konuyu bilmiyorum");
foreach($cevaplar as $sorunun=>$cevap) {
if(eregi($sorunun,$soru)) {
die($cevap);
}
}
echo $anlamadim[rand(0,count($anlamadim))];
?>
index.php de bir form oluşturuyoruz. Bu form div etiketleri ile oluşturuluyor ki Jquery tarafından kolay seçilebilsin. Css dosyasında ise bu div lere ölçüler veriliyor ve şekil aldırılıyor. Sonra Js tarafında form daki düşmeye tıklandığı anda sor() isimli fonksiyon çalıştırılıyor. Burada form içerisindeki soru isimli metin alanından soru alınıyor ve olduğu gibi karşı tarafa yollanıyor. Sonrasında gelen cevap sorular id sini alan div alanı içerisine yerleştiriliyor. Eğer ki kişi birşey yazmaz ise alert ile boş mesaj yollanamaz sinyalini veriyoruz…
Php tarafında ise öncelikle sorumuz alınıyor ve zararlı ifadelerden arındırılıyor. Sonrasında $cevaplar isimli dizide soru=>cevap şekilde tanımlamamızı yapıyoruz. Eğer ki bu sorular içerisinde yoksa anlamadım hatasını farklı farklı versin diye de ayrı bir dizi oluşturuluyoruz.
Sonrasında dizi 0′ dan başlatılarak yazdırılıyor. Her döngüde dizi içerisinde soru mevcut mu diye bakılıyor eğer ki bulursa betiğin die() fonksiyonun hemen altından sonrakiler öldürülüyor ve ekrana sorunun cevabı yazdırılıyor. İşte can alıcı nokta; eğer ki öldürülmez ise rastgele sayı belirleniyor ve bu sayı ile ekrana rastgele bir değer yazdırılıyor. İşte burada die() sayesinde betiği boşuna başka bir döngüden kurtarıyoruz…
Sorularınızı, tavsiyelerinizi buradan yazabilirsiniz. İyi günler, iyi çalışmalar…
Benzer Yazılar;
- Görsel Ders: Php de İf Ve Random Terimleri
- Php ile Nesnel Programlama - 3
- Frameworks ve MVC
- iGoogle Gibi Hava Durumuna Göre Resim Yazdırma
- Php ile Online Üyeler

Ertuğrul bu betiğin genel mantığını güzel bir şekilde açıklamışsın. Büyük bir özveri ve çalışma ortaya koymuşsun. Öncelikle bunlar için teşekkür ederim.
Yalnız botacad bu söylediklerinden biraz daha gelişmiş bir sistem. Öncelikle yapay zeka, yani karşıdakini en doğru şekilde anlamak gerçekten çok zor. Bizim botacad de kullandığımız algılama mantığı özet olarak şu şekilde çalışıyor.
CÜMLE OLARAK SORULDUYSA
cümle kalıbı olarak aynen girildiyse onun cevabını verir
kalıp olarak aynısı yoksa
devrik cümle mantığı çalışır. kelimelerin yerleri değiştirilmiş veya birden fazla kelime eklenmiş sorular varsa o birden fazla kelimenin uyumu halinde cevabı verir.
cümle olarak sorulduğunda devrik cümle uyumu yoksa, her kelime içerisinde benzerliklere bakarak, önce düzgün cümleolarak benzer kelimeler veya devrik cümle olarak benzer kelimelere göre cevap verir.
TEK KELİME SORULDUYSA
kelimenin birebir uyumlu olduğu soru varsa cevap verilir yoksa belirlenen sayıda harfe kadar farklılığa göre benzerleri cevaplanır
o da yoksa içerisinde bulunduğu kelimere göre cevap verilir (ar —> araba)
bu mantık sayesinde, kısaltmaları ve hatalı yazımları tanıyabilmektedir.
Bununla birlikte, aynı soruya birden fazla farklı cevap verebilir ve de birden fazla soru için aynı cevabı vermesi sağlanabilir.
Merhaba Kaan bey;
Öncelikle teşekkür ederim hem yorum yazdığınız hemde yapay zeka konusunda mantığı verdiğiniz için. Botacad ile büyük bir atılım olduğunu biliyorum ve hatta bu kadar basit bir mantık ile çalışmadığını da biliyordum. Yinede arkadaşlara en azından fikir vermesi için birşeyler yazdım :=)
Değerli yorumuzun için tekrar teşekkürler
Beki Bu Sistemi Mysql Baglantılı Bi Şekilde Olmazmı Acaba Cevaplar Tablosu ve Sorular Tablosu Soruldugu Soruyu Cevaplar Tablosundan Bakıp En İyi Cevapı Verilebilirmi Acaba :S
Eğer yeterli Php bilginiz varsa bunu çok rahat bir şekilde yapabilmeniz lazım zaten. Öncelikle dediğiniz gibi sorular ve cevaplar isimli bir veritabanı oluşturup bütün verileri şekin.
Normalde verileri okurken bir while veya döngüsü kurarız. İşte bu döngü içeriside verileri $dizi[] şeklinde atama yaparak bir diziyede atamış olursunuz. Yine de bir ara bu konu hakkında tekrar yazı yazacağım.
İyi günler..
Çok Güzel Olur Ertuğrul Biraz Daha İyi Anlaşım Olurum Konuyu Tekrardan İyi Geceler
Çok istifade ettim. ilham verici, acık, kolay ve yararlı bir çalışma olmuş. tebrikler
benzer kodlarla deneme yaptım ve frısat buldukça devam edeceğim. mantık aynı fakat sadece dizi ve for döngüsü ile zor. düzenli ifadeleri kullanmakta gerekli.
programda ben şunu fark ettim diziye soru ve cevaplar yüklendiğinde hayret ve şaşkınlık gibi ifadeler en başta olursa cümlede daha doğru cevaplar çıkıyor. aynı insanın ani olaylarda verdiği tepkide olduğu gibi ve yine önemli bilgilerin HDD üzerinde ilk sektöre atılmasındaki gibi. kolay gelsin
Merhaba;
Böyle yorumlar görmek çok güzel gerçekten, tam bir beyin fırtınası gibi. Evet dediğiniz gibi kısa cümleler ilk sıraya alınmalı. Bunun nedeni kısa olan sözlükler, uzun olan sözlükler içerisinde ses olarak bulunabilir. O zaman da sistem şaşar.
Aslına bakarsanız bu yazıya tam olarak yapay zeka demekte yanlış olur. Yüz defa aynı soruya anlamadım diyen bir sistem öğrenemez, öğrenmeyen şey ise zeka olamaz..
Seviyeli yapay zeka yapilabilir mi? Blog projemi ben yokken yonetecek bir zeka mesela.
EeTr, geliştirmek için yapılması gereken ilk adım belli:
Anlamadım dediğinde bir input daha koyarsın altına, sorduğu sorunun cevabını biliyorsa eğer, cevaplamasını istersiniz kullanıcının. O cevabı yazdığında belirlediğiniz kriterlere göre şekillerde db ye kaydedersiniz. Daha sonra aynı soru sorulduğunda artık anlamadım demiyecektir. İşte kısa bir geliştirme fikri.
[...] [...]
denedim ama hata aldım yapamadım galiba :S
soru sorunca şu hatayı veriyor.
Deprecated: Function eregi() is deprecated in D:xampphtdocsxamppbot.php on line 7
Deprecated: Function eregi() is deprecated in D:xampphtdocsxamppbot.php on line 7
Deprecated: Function eregi() is deprecated in D:xampphtdocsxamppbot.php on line 7