Elinizdeki içerikteki kelime yoğunluğunu ölçmek istiyorsanız, string’i kelimelere bölmeniz gerekir. Ayrıca içeriği TinyMCE gibi bir editörden alıyorsanız; html taglarını da almamanız gerekecek.
explode fonksiyonu kullanılabilir ama bu fonksiyon ile yazının düzenli olması gerekir. Mesela boşluk sayısı birden fazlaysa sorun çıkarabilir(denemedim). Ayrıca html kodlarını ayıklamak için uygun değil.
Aşağıda yazdığım fonksiyon yazıdaki kelimeleri en az bir boşluğa ve html taglarına göre kelimelere ayırıyor. Bu fonksiyon ile veritabanına kelimeler kaydedilip kelime yoğunluğu ölçülebilir.
Fonksiyonun çalışma mantığı şu şekilde; string uzunluğu kadar for açılır ve her harf for içinde kontrol ettirilir. Eğer string içerisinde < işareti varsa html başlamış demektir. while ile html bitene kadar yani > işaretine kadar pas geçilir. Eğer boşluk varsa while ile boşluk olmayana kadar pas geçilir. Bunların dışında harfler toplanır ve < ve boşluk işaretine göre kelime oluşturulur.
PHP ile Yazıyı Kelimelere Bölmek için gerekli fonksiyonu indir
<?php
function htmlsil($x) /*Fonksiyon $x ile kendine gelen stringi alıyor.*/
{ /*Fonksiyon başlangıcı*/
$uz=strlen($x); /*Fonksiyon stringin uzunluğunu uz değişkenine aktardı.*/
$topla=”"; /*Kelimenin oluşacağı değişken boşaltılıyor. */
for ($i=0;$i<$uz;$i++) /*String uzunluğu kadar döngü açlıyor. */
/* Bu sayede $x[$i] ile her karakter kontrol edilebilir.*/
{ /*For başladı*/
if ($x[$i]==”<”) /*Eğer karakter < ise html başlamıştır. */
{ /*Eğer html başlamışsa /if başlangıcı/ */
echo $topla.”<br>”; /*Eğer html başlamışsa önceki kelimeyi ekrana yaz.*/
$topla=”"; /*Kelimeyi toplayan değişkeni yeni kelime için boşalt.*/
while($x[$i]<>”>”) /*html bitişi için > işaretine kadar boşa dön*/
{$i++;} /*Bu sayede html tagları pas geçiliyor.*/
} /*Eğer html ise bitti. /if sonu/*/
else if ($x[$i]==” “) /*Eğer boşluk varsa. Kelime bitmiştir ve yeni kelime başlar.*/
{ /*Eğer boşluk varsa /if başlangıcı/*/
echo $topla.”<br>”; /*Boşluk varsa kelime tamamlanmıştır. Kelimeyi yaz*/
$topla=”"; /*Kelime toplayan değişkeni yeni kelime için boşalt*/
while($x[$i]<>” “) /*Eğer birden fazla boşluk olmayan kadar dön.*/
{$i++;} /*Fazladan boşluklar pas geçilmiş oldu.*/
} /*Boşluk varsa bitti. /if sonu/ */
else if (($x[$i]<>”,”) && ($x[$i]<>”.”) ) {$topla=$topla.$x[$i];}
/*Eğer boşluk ve < işareti yoksa harflari toplayıp kelime oluştur. Ama . ve , gibi karakterleri alma. Bu karakterlere başka noktalama işaretleri de eklenebilir. */
} /*string bitti /for sonu/ */
}
?>
Kelimeler ekran yerine veritabanına da yazılabilir. Bu sayede kelime yoğunluğu ölçülür.
Üstteki bölüm yayınlandıktan sonra strlen, strpos ve substr fonksiyonlarını incelerken html kodlarını ayıran bi fonksiyon daha yazdım. Bu fonksiyon üsttekine göre sanırım biraz daha iyi sanırım.
Aşağıdaki fonksiyon > tagı ile < tagı arasında bulunan yazıları alır. < > tagları arası html olduğu varsayılırsa > < arası html dışındaki yazı olacaktır.
function html_cik($metin)
{
$uz=strlen($metin);
$bitti=1;
$yeni_basla=0;
$topla=”";
while ($bitti)
{
$html_basla = strpos($metin,”<”,$yeni_basla);
$html_bit = strpos($metin,”>”,$yeni_basla);
if ($html_basla === false)
{
$bitti=0;
}
else
{
$k_say=$html_basla-$yeni_basla;
$parca=substr($metin,$yeni_basla,$k_say);
$topla=$topla.” “.$parca;
$yeni_basla=$html_bit+1;
}
}
return($topla);
}
Aşağıdaki fonksiyon da nokta,virgül, soru işareti gibi işaretleri boşluğa çeviriyor.
function k_sil($metin)
{
$o_kel=array(”.”,”,”,”:”,”;”,”?”,”!”,”-”);
foreach ($o_kel as $kar)
{
$metin=str_replace($kar, ‘ ‘, $metin);
}
return($metin);
}
Veritanına yazaken \n karakteri(enter) yazıyı alt satıra yazar, bunun olmaması içinde aşağıdaki kod kullanılabilir. Yani yazıyı satırlara bölmeden kaydeder. Bi de karakterini boşluğu dönüştürür.
$metin=preg_replace(’/\s\s+/’, ‘ ‘, $metin);
$metin=str_replace(’ ’, ‘ ‘, $metin);
Yukarıdaki fonksiyonlar sonucunda peşpeşe birden fazla boşluk oluşabilir veya yazıda peşpeşe birden fazla boşluk olursa diye peşpeşe birden fazla boşluğu alan bir fonksiyon yazdım…
Peşpeşe birden fazla boşluğu tek boşluk haline getiren php fonksiyonu:
function tek_bosluk($metin)
{
$toplam_metin=”";
$uz=strlen($metin);
$bosluk=0;
for ($i=0;$i<$uz;$i++)
{
if (!(($bosluk) && ($metin[$i]==” “)))
{$toplam_metin=$toplam_metin.$metin[$i];}
if ($metin[$i]==” “)
{
$bosluk=1;
}
else{$bosluk=0;}
}
return(trim($toplam_metin));
}
Yukarıdaki işlemleri Tinymce gibi bir editörden gelen veriye uyguladıktan sonra yan yana kelimeleri aşağıdaki fonksiyonla veri tabanına yazabilirsiniz… Tabi sql ile bunları guruplama ve yoğunluk ölçme işlemleri yapmak lazım..
function bol($metin,$nesne_id)
{
include(”baglanti.php”);
$kelime=explode(” “,$metin);
for ($i=0;$i<count($kelime);$i++)
{
mysql_query(”INSERT INTO `analiz` (`kelime`,`nesne_id` ) VALUES ( ‘$kelime[$i]’,'$nesne_id’ )”);
}
}