Türkiye Online Medya Araştırması

İçeriğin rss beslemesi kullanımda değil Soru - Cevap Bölümü / Kategori: Programlama

19/03/2010 - 12:04:11 cevap (18) Okunma : 1812 Bu yazıyı 2 kişi tuttu.

Küfür filtresi yapma

arkadaşlar, herkese iyi çalışmalar;

oyun içindeki mesajlaşma bölümü için bir küfür filtresi yapmaya çalışıyorum.

Web üzerinde bir çok örneği inceledim, bana oldukça yavaş algoritmalar olarak göründü. Çoğunlukla sabit bir kaç kelime üzerinden filtreleme yapıyorlar. Benim istediğim ise şöyle birşey:

bir kelime başında ve sonunda boşluk ,özel karakter, veya sayı içeren harf dizisi olarak algılanmalı.

Örn.

"kelime"

kelime

,kelime,

1kelime

küfür tek bir kelime de olabilir, bir cümle kalıbı da. Küfürlü kelime dizisi dışarıdan (veri tabanından yada XML dosyasından) alınacak.

Bu şartlar altında bul değiştir yapmam lazım. Filtreleme işini tüm mesajların dağıtıldığı RTMP server üzerinde de yapabilirim. Ancak bir şikayet opsiyonu da olacak. Şikat edildiğinde, oyun masasındaki tüm yazışmanın sansürsüz haliyle şikaterler veritabanına kaydedilmesi gerekiyor. Bu durumda da, gidip gelen mesajlara bir de mesajın sansürsüz halini eklemek gerekir.

En hızlı çalışan algoritmayı kurmak için düşünüyorum. Bu konuda sizlerinde fikirlerini almak isterim.

« ilk « 1  2 
adres aerkanc profilini göster
Ahmet Erkan ÇELİK 27.10.2009 10:38:18
En iyi cevap mı ?
Faydalı cevap

Biraz zaman geçti, paylaşmayı unutmuşum: Filtre için şu class'ı yazdım:


package com.aec.Messaging
{
    import mx.collections.ArrayCollection;

    public class SwearFilter
    {
        private var _blackList:ArrayCollection;
        private var trFlexer:ArrayCollection;
        public function SwearFilter(blackList:ArrayCollection=null)
        {
            trFlexer = new ArrayCollection(["IN","INI","ININ","ÜN","ÜNÜ","ÜNÜN","İN","İNİ","İNİN","UN","UNU","UNUN",
            "İM","İMİ","İMİN","IM","IMI","IMIN","UM","UMU","UMUN","ÜM","ÜMÜ","ÜMÜN","SI","SINI","SININ","Sİ","SİNİ",
            "SİNİN"]);
            this.blackList = (blackList!=null) ? blackList : new ArrayCollection();
        }
        public function set blackList(value:ArrayCollection):void{
            this._blackList = new ArrayCollection();
            var badWord:String;
            var flexer:String;
            for each(badWord in value){
                badWord = upCase(badWord);
                this._blackList.addItem(badWord);
                for each(flexer in trFlexer){
                    blackList.addItem(badWord+flexer);
                }
            }
        }
        public function get blackList():ArrayCollection{
            return _blackList;
        }
        public function useFilter(message:String):String{
            var i:int =0;
            var badWord:String;
            var replacementWord:String;
            var orgMessage:String =" " + upCase(message) + " ";
            var msg:String =orgMessage;
            for each(badWord in blackList){
                replacementWord ="";
                for(i=0 ; i<badWord.length ; i++ ) replacementWord +="@";
                replacementWord = " " + replacementWord + " ";
                badWord = " " + badWord + " ";
                msg = msg.split(badWord).join(replacementWord);
            }
            return (orgMessage!=msg) ? msg : message;
        }
        public function upCase(word:String):String{
            word=word.split("ç").join("Ç");
            word=word.split("ğ").join("Ğ");
            word=word.split("ı").join("I");
            word=word.split("i").join("İ");
            word=word.split("ö").join("Ö");
            word=word.split("ş").join("Ş");
            word=word.split("ü").join("Ü");
            return word.toUpperCase();
        }
    }
}

Kullanımı:


var wordList:Array = ["Salak","gerizekalı","aptal","ağzına tüküreyim",""];
var swearFilter:SwearFilter = new SwearFilter(new ArrayCollection(wordList));
var message:String = "gerizekalı senin ağzına tüküreyim";
var filterMessage= swearFilter.useFilter(message);

Bu class biraz esneklik sağlayarak, kara listede bulunan keilmelere türkçe ekler de takıyor ve bu kelimeleri de kara listeye ekliyor. Çok artificial birşey değil yinede. Herşey karalistenin geniş oluşturulmasına bakıyor.

Arama yaparken de tüm kelimelerin başına ve sonuna boşluk konuluyor. Böylece doğrudan kelimeler aranıyor.

Kara liste de cümle olarak kalıplar kullanılırsa daha başarlı sonuç alınabilir.

adres matasoy profilini göster
Murat ATASOY 20.11.2009 21:08:32
En iyi cevap mı ?

Gerçekten çok akıl aydınlatıcı sohbetler olmuş. Teşekkür ederim. Bu class'ı php için düzenleme şansınız varmı acaba? Nette böle bir mantıkla yazılmış php classı yok sanırım, fikir çok güzel

adres aerkanc profilini göster
Ahmet Erkan ÇELİK 23.11.2009 00:07:22
En iyi cevap mı ?
Faydalı cevap

Yardım isteyen birisi ile hazırlopçu arasındaki farklar:

  • Hazır lopçu hiç vermez, hep ister, yardım isteyenin ise elinde uzun süreli uğraşlarının sonucunda elde ettiği problemler vardır. Hatanın nerede olduğunu merak eder
  • Hazır lopçu algoritmayala yetinmez, çalışan kod ister, yardım isteyen için bazıen tek bir kelime yeterlidir.
  • Hazırlopçu alacağını alır ve tüyer, vefa duygusu yoktur. Yardım isteyen ise kensine yardım edenlere teşekkür eder, ilk fırsatta onlara yardım elini uzatır
  • Hazır lopçunun profilinde sorduğu sorular bölümü kalabalık, verdiği yanıtlar bölümü ise çoooook tenhadır(Çoğunlukla 0 dır.)
« ilk « 1  2 

aç-kapa Bu Yazıyı Tutanlar

yeni üyelik | şifremi unuttum

aç-kapa Toplantı Özgür Yazılım ve Linux Günleri '10

Özgür Yazılım ve Linux Günleri '10

İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü ve Linux Kullanıcıları Derneği'nin 9 yıldır düzenlemekte oldukları etkinlikler bu yıl `Özgür Y...
Kategori: Toplantı

aç-kapa Yarışma 3. Uluslararası Ekslibris Yarışması: İstanbul 2010

3. Uluslararası Ekslibris Yarışması: İstanbul 2010

İstanbul Ekslibris Dernegi, Feyziye Mektepleri Vakfı ve Işık Üniversitesi, kitaplar için mülkiyet işareti olarak kabul edilen ve üzerinde estetik dege...
Kategori: Yarışma

aç-kapa Konferans Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Yeni Medya ve Etkileşim Konferansı 2010 - Marmara Üniversitesi

Generally speaking, the term "New" brought about debates. We try to open up and elucidate the term "New" along with "Interact...
Kategori: Konferans

aç-kapa Konferans 3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

3. Uluslararası Gelecek İçin Öğrenme Alanında Yenilikler Konferansı 2010: e-Öğrenme

Konferans ile ilgili ayrıntılı bilgiye aşağıdaki bağlantıdan ulaşabilirsiniz: http://www.futurelearning.org.tr/katilim_cagrisitr.pdf ...
Kategori: Konferans

üyeler Son Kahramanlar...

stats Kimler Burada? web stats

Son 1 dakika içinde MMIstanbul' da 59 (50 kayıtlı, 9 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:

Blog Bölümü Blogevi.com'a Taşınıyor

Selam arkadaşlar MMIstanbul'da , tasarımcı ve programcıların blog yazılarını "feedleyerek" MMIstanbul okurlarını MMIstanbul dışın ...

7.500'üncü üyemiz Cem Koç!

Neler Yapılabilir?

500 Hatası Hakkında!

Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)

coldfusion mysql ubuntu
 
sponsor adobe istanbul