Bu yazımızda PHP ile Türkçe metinlerin sıklık alma işlemini ele alacağız. Herhangi bir Türkçe yazılmış bir kitap olabillir yada kendi yazdığımız bir yazının sıklık alma işlemi için ben aşağıda ki kodları geliştirdim ve bunları kullanıyorum.
Sıklık alınacak olan metini ben Google da kitap önsöz olarak aratıp “Bir Gezginin Efsanesi” kitabının Türkçe yazılmış önsözünü kullandım. Sizde bunu kullanabilirsiniz.
Şimdi kullandığımız kodlar içerisinde daha önce kullandığımız Türkçe kelimeleri küçültme fonksiyonunu kullanacağız.
function strtolower_tr($s){ $buyuk = array("A","B","C","Ç","D","E","F","G","Ğ","H","I","İ","J","K","L","M","N","O","Ö","P","R","S","Ş","T","U","Ü","V","Y","Z","Q","W","X"); $kucuk = array("a","b","c","ç","d","e","f","g","ğ","h","ı","i","j","k","l","m","n","o","ö","p","r","s","ş","t","u","ü","v","y","z","q","w","x"); $cikti = str_replace($buyuk,$kucuk,$s); return $cikti; }
Türkçe yazılmış olan metini textarea girişimizden bir form ile post metodunu kullanarak işlem kodlarımızı içeren dosyamıza gönderiyoruz. Yukarıda ki resimde görüldüğü gibi.
Şimdi POST metodu ile gönderilen metinimizi hazırlamış olduğumuz kodları ile önce küçültüp daha sonrada kelime kelime ayırıp, bir array içerisine atıyoruz.
$kelimeler = preg_split('/([\s\-_—,:;?!\/\(\)\[\]{}<>\r\n"]|(?<!\d)\.(?!\d))/', $text, null, PREG_SPLIT_NO_EMPTY); $kelimes = array(); foreach($kelimeler as $kelime){ $uzunluk = strlen(strtolower_tr($kelime)); if($uzunluk > 1){ $kelimes[] = strtolower_tr($kelime); } }
Kelimeleri array içerisinde kaçar tane olduğunu ve bunları sıklık sayısına göre ayırma işlemini aşağıdaki kodlar ile gerçekleştiriyoruz.
$kelimsonucs = array_count_values($kelimes); $kelimbirlestir = array(); $kelimbirles =array(); foreach ($kelimsonucs AS $kelim=>$siklik){ if($siklik == 1){ $kelimbirlestir[] = $kelim; }else{ $kelimbirles[$kelim.' ('.$siklik.')'] = $siklik."-".$kelim; } natsort($kelimbirles); $kelimbirles = array_reverse($kelimbirles, true); }
Burada kelimelerin sıklık sayısına göre tek olan kelimeleri $kelimebirlestir arrayına atıyoruz. $kelimebirles arrayında ise birden fazla olan kelimeleri saklıyoruz.
Daha sonra bu arrayları ayrı ayrı ekrana yazıdırıyoruz.
echo "<table>"; echo "<thead><tr><th>Kelimeler</th><th>Sıklık</th></tr></thead>"; foreach($kelimbirles as $tabkel){ $kel = explode("-",$tabkel); echo "<tr><td>".$kel[1]."</td><td>".$kel[0]."</td></tr>"; } foreach($kelimbirlestir as $tabskel){ echo "<tr><td>".$tabskel."</td><td>1</td></tr>"; } echo "</table>";
Sonuç olarak aşağıdaki gibi bir tablo elde edebiliriz.
Kelimeler | Sıklık |
---|---|
ve | 18 |
bir | 18 |
bu | 15 |
için | 9 |
daha | 6 |
olan | 5 |
ne | 5 |
gittikçe | 5 |
bana | 5 |
var | 4 |
nasıl | 4 |
şekilde | 3 |
özellikle | 3 |
zaman | 3 |
tekrar | 3 |
olduğunu | 3 |
karşılaştığım | 3 |
karşı | 3 |
kadar | 3 |
değişik | 3 |
öğretilmiş | 2 |
… | … |
Demo için tıklayınız…