Słownik wulgaryzmów

0

Witam,

dopiero zaczynam moją przygodę z C#, a już zostałem wrzucony na głęboką wodę.
Mam do wykonania prosty komunikator ( nadajnik i odbiornik ) -> to już mam gotowe i wszystko pięknie działa :)
Ma on również posiadać słownik wulgaryzmów.

!
Potrzebuję zatem funkcji, która porówna wprowadzony tekst ( z textbox ) z plikiem zawierającym wulgaryzmy.
A następnie zamieni znalezione wulgaryzmy na *****
!

Proszę o pomoc.

0

Wpisz do listy, tablicy, pliku etc. wulgaryzmy, następnie pobierz tekst z textboxa. Pobrany tekst z TextBoxa podziel funkcją split (przy wykorzystaniu pustych znaków ' ') otrzymasz same słowa z danego zdania. Następnie sprawdź każde słowo (dokonaj konwersji na małe litery, tak samo przetrzymuj dane w zbiorze wulgaryzmów by nie sprawdzać czy użytkownik wprowadził wulgaryzm z dużej czy małej litery) czy istnieje w liście, tabeli. Jeżeli istnieje zastąp znakami *.

0

Utknąłem w martwym punkcie,
nie wiem jak wykorzystać porównanie do zmiany znalezionych słów na ****
Czyli co w if

kod:

 string[] przeklenstwa = System.IO.File.ReadAllLines("C:\\Users\\User\\Desktop\\Komunikator\\wulgaryzmy.txt");
            string text = wpis.Text;
            char[] znaki = { ' ', '\t', ',', '.' };
            string[] slowa = text.Split(znaki);
            foreach (string slowo in slowa)
            {
                foreach (string przeklenstwo in przeklenstwa)
                {
                    if (String.Compare(slowo, przeklenstwo, true) == 0)
                    {
                        
                    }
                }
                
            }
0

Zamiast foreach użyj for i zamieniaj znalezione słowo w tablicy na gwiazdki.

0

Jak napisać to na forach, tak aby leciało po całej tablicy i umożliwiło porównanie za pomocą String.Compare ?

0

Tak samo jak na foreach. Chociaż w zasadzie znalezione słowo mozesz od razu zamieniać w zdaniu, zamiast w tablicy po której iterujesz.

2

A po co w ogóle sprawdzać, czy istnieje, skoro i tak chcemy zamienić?

Wersja nieoptymalna (optymalna wymaga użycia klasy StringBuilder):

string[] przeklenstwa = System.IO.File.ReadAllLines("C:\\Users\\User\\Desktop\\Komunikator\\wulgaryzmy.txt");
string text = wpis.Text;
foreach(var p in przeklenstwa)
{
    text = text.Replace(p, "*****");
}
wpis.Text = text;
0
somekind napisał(a):

A po co w ogóle sprawdzać, czy istnieje, skoro i tak chcemy zamienić?

Wersja nieoptymalna (optymalna wymaga użycia klasy StringBuilder):

string[] przeklenstwa = System.IO.File.ReadAllLines("C:\\Users\\User\\Desktop\\Komunikator\\wulgaryzmy.txt");
string text = wpis.Text;
foreach(var p in przeklenstwa)
{
    text = text.Replace(p, "*****");
}
wpis.Text = text;

Super rozwiązanie.

Zaraz sprawdzę czy zadziała, ale zastanawia mnie jak będzie działało dla wulgaryzmów zaczynających się od innego wulgaryzmu,
załóżmy: kwiat zostanie zamieniony na *****, ale kwiatek już na *****ek.
Czy się mylę ?

0

Tak, w ten sposób tak to zadziała - to jest najprostsze możliwe rozwiązanie, ale możesz je dowolnie komplikować.

0

byl kiedys artykul... nie pamietam gdzie go czytalem. Ale ogolnie zamiana/blokowania wulgaryzmow jest niebezpieczna. Tak o to przez to yahoo i chyba google blokowalo cale miasto. Tak samo niektore imiona, nazwiska, gminy, firmy etc.

Nawet w polskim sa slowa ktore zawieraja w polowie np jakis wulgaryzm... ale wulgaryzmem nie jest... i co wtedy?

edit. znalazlem
https://zaufanatrzeciastrona.pl/post/historia-spektakularnych-wpadek-filtrow-eliminujacych-zakazane-slowa/

1 użytkowników online, w tym zalogowanych: 0, gości: 1