Yalnızca yüksek sıklıkta görülenlere odaklanarak dişe dokunur bir miktarda değişiklik sağlanabilir.

Bunun için önce elimizdeki yazıları sözcük grupları şeklinde listeleriz, sonra bunları görünme sıklıklarına göre listeleriz, ve listenin tepesine neleri değiştirebiliriz diye bakarız, ve bunların değişik biçimlerini ilk biçimleri ile birlikte karşılıklı bir tabloya alırız.

İlk aşama için bir örnek:

Alıntı
$sorgu="SELECT y.yazi FROM yazi y LEFT JOIN varlikyazi vy ON vy.yazino=y.no LEFT JOIN varlik v ON v.no=vy.varlikno WHERE v.sinif=1 LIMIT 1000";
$sonuc=mysql_query($sorgu);
while($str=mysql_fetch_row($sonuc)) {
$soz=explode(" ",preg_replace("/([\.:,;\!\?])/"," $1",$str[0]));
$adet=count($soz);
for($i=0;$i<$adet;$i++) {
if ( ! preg_match("/[[unct:] ]/",$soz[$i].$soz[$i+1]) ) echo trim($soz[$i])." ".trim($soz[$i+1])."\n";
} // for i
} // while str
Burada karışık bir veritabanından yalnızca belli bir tür yazıları çektik, noktalama işaretlerinin kimilerini ayıkladık, ve ikişerli olarak yazdırdık. Üç sözcüklü sözcük öbekleri olarak yazdırmak için ilgili kısma $soz[$i+2] eklemek, tek sözcük içinse $soz[$i+1]'i çıkarmak yeterli.

Bu arada bu işlemleri bir unix komut satırında yapıyoruz. Bu yukardaki kodu uygun veritabanı açma kapama ve verilerle sizin elinizdeki verilere uygun bir sorgu ile çalışacak şekilde getirdikten, ve verial.php gibi bir adla kaydettikten sonra, unix/linux komut satırında çağırıyoruz:

#php verial.php

Bir sürü sözcük çifti göreceğiz. Sıralayalım:

#php verial.php|sort

Sıralı listede ardışık olarak tekrarlananları gruplayıp başına kaç kez yinelendiğini yazalım:

#php verial.php|sort|uniq -c

Şimdi de son olarak başlarındaki bu çokluk bilgisine göre bir daha (sort -n) ve büyük sayılar yukarda olacak şekilde (sort -r) sıralayalım:

#php verial.php|sort|uniq -c|sort -nr

Evet... Şimdi elimizde bir liste var. En çok görülen sözcük çiftleri (2-gram'lar) yukarıda. Bu listeyi inceleyip, yanlarına tab ile ayrılmış biçimde yazıyoruz...

Örneğin:

7683 ya da | veya
2417 pek çok | birçok
645 her sene | her yıl
...
gibi... '|' işaretini "tab" karakteri yerine kullandım. Önerim olabildiğince daha Türkçe ve doğru sözcükler kullanmak ki, bu işlevi kullandığımız forumlar daha bir standart olsun, ve bilgisayarlarca rahat işlnebilsin ileride. Örneğin önceki sayfadaki örnekte "elle" sözcüğü "manuel" olarak dönüştürülmüştü. Bunun tersini öneriyorum: "Fakat", "lakin" ve "ama" gibi yabancı sözcüklerin "ancak" gibi Türkçe olanları ile değiştirilmesini.

Bu arada eş anlam kullanımı yüzünden tekli sözcüklerin dönüştürülmesini önermiyorum. 2-gram veya 3-gram'larla çalışmak anlam sapmasını engelleyecektir. Kısaca, örneğin tüm "numara"ları "no" yapmaya kalkışan bir program, "yüz numara"yı da "yüz no" yapacağından insanların gülmekten altına yapmasına yol açabilir...

Değişiklikleri yapmaksa çok kolay:

Bir veritabanından bunları yüklüyoruz:

Alıntı
$sorgu="SELECT ilkbicimi,digerbicimi FROM karsiliklartablosu LIMIT 100;";
$sonuc=mysql_query($sorgu);
$i=0;
$sozilk=array();
$soziki=array();
while ($sz=mysql_fetch_row($sonuc)) {
$sozilk[$i]="/ ".$sz[0]." /";
$soziki[$i]=$sz[1];
$i++;
} // while
Burada sozilk dizisini oluştururken sağına soluna boşluk koymayı ve regexp olduğunu belirtmek için başına ve sonuna '/' koymayı unutmuyoruz.

Devam edelim... Şimdi değişecek yazıdaki sözcüklerden noktalama işaretlerini uzaklaştıralım, regexp ile yazıyı bu az önce oluşturduğumuz dizileri kullanarak değiştirelim, ve noktalama işaretlerini yeniden sözcüklere bitiştirelim:

Alıntı
$yazi=preg_replace("/([\.,:;\?\!)/"," $1",$yazi);
$yazi=preg_replace($sozilk,$soziki,$yazi);
$yazi=preg_replace("/( [\.,:;\?\!)/","$1",$yazi);
Evet, hepsi bu. preg_replace parametre olarak dizi alabiliyor. Bu işimizi kolaylaştırdı... Bu arada noktalama işaretlerinden kimisini bu örneklerde atladım, uygulamada tüm özel durumları düşünmek gerek. Bu yukardakiler yalnızca örnek kod parçacıkları.

İşe yaraması ve Türkçe özürlü forumların bu programlama yollarıyla daha düzgün olması dileğiyle.

(not: bu yazıyı şimdi forumun şu üç satırlık form boşluğuna yazıyorum; kimi yazım hataları olabilir. Kontrol edilmeden denenmesini önermiyorum. İlk kod örneğinde dil çıkaran işaretin bulunduğu yerde "[ [ : p u n c t : ] ]" yazıyor boşluklar olmadan. İşte regexp'in böyle bir tehlikesi var, özel durumları değiştirmemeye dikkat etmeli.)