pillinetwork hesabınızla giriş yapın.

PHP ile Sansür / Filtreleme İşlemi

Merhaba,
Bu yazımda mümkün olduğunca uzun yoldan basit bir filtreleme / sansür sistemi yazarak size PHP'de metin işlemlerinin mantığını ve birkaç dosya işlemleri fonksiyonunu göstermeyi amaçlıyorum.
Önce yapılacaklar listemizi çıkaralım :

  1. Bir kelimeler.txt dosyamız olacak ve yasak kelimeler
    1
    eray|alakese
    şeklinde bu dosyada tutulacak.
  2. kelimeler.txt dosyası okunup, tüm içeriği (yani tüm yasaklı kelimeler) bir değişkene aktarılacak
  3. Değişken | işareti baz alınarak parçalanacak böylece tüm yasaklı kelimeler bir dizi değişkenine aktarılmış olacak
  4. strtr() fonksiyonuyla sansür işlemi gerçekleştirilecek.

Şimdi ilk olarak sansür uygulayacağımız cümleyi belirleyelim:

1
Merhaba benim adım eray soyadım ise alakese

Yasak kelimelerimiz de eray ve alakese olsun.
1
eray|alakese

kelimeler.txt dosyamızın içeriği yukarıdaki gibi olmalı.

Sıra geldi, kelimeler.txt dosyasını okuyup, içeriğini bir değişkene atamaya.

1
$dosya = fopen('kelimeler.txt','r');

fopen fonksiyonu aracılığıyla dosyamızla bağlantı kuruyoruz. 2. parametre ile dosya izinlerini belirlemiş oluyoruz.

r => sadece okunabilir
w => okunabilir, yazılabilir

1
2
3
4
while (!feof($dosya))
{
$kelimeler .= fgets ($dosya,10240);
}

Her dosyanın sonunda bir End Of File (eof) komutu vardır. PHP'de bu eof komutu feof() fonksiyonu ile aratılır.
1
while (!feof($dosya))

kısmı döngünün, dosyada EOF komutu bulana kadar (yani dosyanın sonuna gelene kadar) devam etmesini sağlar.
1
$kelimeler .= fgets ($dosya,10240);

kısmı ise dosyanın xxx parçalar halinde okunup $kelimeler değişkenine atanmasını sağlar.
Şuan en baştaki örneğimize göre bakacak olursak $kelimeler değişkeninin değeri şu oldu :
1
eray|alakese

Ancak bizim eray ve alakese değerlerini içeren bir dizi değişkenine, yani $kelimeler değişkenini | işaretini baz alarak parçalamaya ihtiyacımız var.
1
$kelimeler = explode("|",$kelimeler);

Şimdi explode fonksiyonu ile eray|alakese metnini parçadık ve şöyle bir dizi elde ettik.
1
$kelimeler[1] = "eray"; $kelimeler[2] = "alakese";

Bu dizi değişkenini şimdilik bu şekilde bırakıp, bir de strtr() fonksiyonuna göz atalım. strtr() fonksiyonu ile verilen bir metindeki istediğimiz kelimeleri topluca değiştirebiliriz. Örnek verecek olursak:

1
2
3
4
$yasak = array(
"ali" => "hüseyin",
"ahmet" => "mehmet");
strtr("ali ile ahmet", $yasak);

bu örnekte strtr $yasak dizi değişkenine bakarak, bütün ali'leri hüseyin'e ; bütün ahmetleri mehmet'e çevirecek.

O halde bizim de

1
$kelimeler["eray"] = "***";

şeklinde bir dizi değişkenine ihtiyacımız var ama bizim dizi değişkenimiz
1
$kelimeler[1] = "eray";

şeklinde. Bu dönüşümü yapmak için aşağıdaki kod yeterli olacaktır.
1
foreach($kelimeler as $kelime){ $deger=$kelime; $kelimeler[$deger]="***"; }

Ve son olarak da

1
echo strtr("Merhaba benim adım eray soyadım ise alakese", $kelimeler");

komutuyla gerekli filtreleme işlemini yapabilirsiniz. Tabiki PHPnin fonksiyon denizinde bu işlemleri çok daha kolay olarak yapmanızı sağlayacak fonksiyonlar var. Ben bu yazı, özellikle açıklamaları detaylandırarak, başlangıç seviyesinde okuyuculara birşeyler katmaya çalıştım.

Spacer
Spacer
/* Etiketler: , , , , , */
/* erayalakese yazdı. 20 Temmuz 2010 12:27. 3 yorum var */

Yorumlar

bu algoritma bire bir kelimeleri filtreler aslında. "grup" kelimesini "Grup,grupp,GruP" şeklinde de yazabilir kullanıcı. Böyle ileri düzey bir kelime filtreleme algoritması yazılmak isteniyosa edit distance algoritma çeşitlerine bir göz atılmasını tavsiye ederim

ya biz bunu asp.net te 1 dk da yapıyoruz siz bu kadar uğraşıyosunuz. .nete geçin rahat edin :)

@shibbytr , yanılıyorsun sansür işlemi esasen bu şekilde yapılmıyor. Ben metin işleme fonksiyonlarına değinebilmek için böyle örnek bir uygulama geliştirmiştim.

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork