2010-07-09 6 views
7

mam na myśli coś takiego:Jaki jest najlepszy sposób analizowania ciąg dla "złe" wyrazy w C#?

foreach (var word in paragraph.split(' ')) { 
    if (badWordArray.Contains(word) { 
    // do something about it 
    } 
} 

ale jestem pewien, że istnieje lepszy sposób.

Z góry dziękuję!

UPDATE Nie szukam, aby automatycznie usunąć świństwo ... dla mojej aplikacji sieci web, chcę być powiadomiony jeśli słowo I uznają za „złe” jest używany. Następnie sprawdzę to sam, aby upewnić się, że jest zgodny z prawem. Automatyczny system oznaczania.

+0

Poszedłem dalej i edytowałem swoje rozwiązanie w odpowiedzi na aktualizację. Daj mi znać, jeśli to odpowie na twoje pytanie. – rakuo15

+0

możliwy duplikat [Jak wdrożyć dobry filtr wulgaryzmów?] (Http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter) –

Odpowiedz

15

Podczas gdy Twój sposób działa, może to być trochę czasochłonne. Istnieje wonderful response here dla poprzedniego pytania SO. Chociaż pytanie mówi o PHP zamiast C#, myślę, że można go łatwo przenieść.

Edytuj, aby dodać przykładowy kod:

public string FilterWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.Replace(inputWords, "<3"); 
} 

który powinien działać dla ciebie, mniej lub bardziej.

Edit odpowiedzieć OP Wyjaśnienie:

Nie szukam usunąć świństwo automatycznie ... dla mojej aplikacji sieci web, chcę być powiadomiony jeśli słowo I uznają za „złe” jest używany .

Dużo jako części zamiennej powyżej, można sprawdzić, czy coś pasuje tak:

public bool HasBadWords(string inputWords) { 
    Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)"); 
    return wordFilter.IsMatch(inputWords); 
} 

on powróci true jeśli ciąg zdałeś do niego zawiera żadnych słów na liście.

+1

Zwykle "mniej". –

+11

Jeśli masz zamiar to zrobić, ** nie zapomnij o '\ b' **. To nieporadny błąd. –

+1

+1 za tyłek i granicę –

1

Można rozważyć użycie obiektów HashKey lub Dictionary<T1, T2> zamiast tablicy, ponieważ użycie na przykład Słownika może sprawić, że kod będzie bardziej wydajny, ponieważ metoda .Contains() staje się metoda .Keys.Contains(), która jest bardziej wydajna. Jest to szczególnie ważne, jeśli masz dużą listę wulgaryzmów (nie wiesz, ile ich jest! :)

4

W mojej pracy umieszczamy automatyczne filtrowanie błędnych słów w naszym oprogramowaniu (szokujące jest to, że przeglądamy źródło i nagle biegnie przez tablicę zawierającą kilka stron obsceniczności).

Jedna porada to wstępne przetworzenie danych wprowadzonych przez użytkownika przed testowaniem na liście, w takim przypadku, że ktoś próbuje coś przez ciebie przekraść. Więc w drodze wyprzedzającym, my

  • wielkie wszystko na wejściu
  • usunąć większość nie-alfanumeryczne (czyli po prostu splatać się żadnych spacji ani znaków interpunkcyjnych itp)
  • a następnie zakładając ktoś stara się przekazać off cyfry litery, zrobić coś takiego: zastąpić zera o, z 9 g, 5 z S itp (bądź kreatywny)

a następnie dostać kilku znajomych, aby spróbować go złamać. To zabawne.

+0

Podoba mi się to ... proste i skuteczne dla moich celów. Dzięki. – Chaddeus

+1

Co więcej, proszenie znajomych o zerwanie to zarówno dobra kontrola jakości, jak i dobranoc :) – Flater

Powiązane problemy