8

私は次のようなことを考えています:

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

しかし、もっと良い方法があると確信しています。

前もって感謝します!

更新 わいせつを自動的に削除するつもりはありません...私のWebアプリでは、「悪い」と思われる単語が使用された場合に通知を受け取りたいです。次に、自分でレビューして、合法であることを確認します。ある種の自動フラグシステム。

4

3 に答える 3

16

あなたのやり方はうまくいきますが、少し時間がかかるかもしれません。ここには、以前の SO の質問に対する素晴らしい回答があります。C# ではなく PHP についての質問ですが、簡単に移植できると思います。

編集してサンプル コードを追加します。

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

多かれ少なかれ、それはあなたのために働くはずです。

OPの説明に答えるために編集:

猥褻な表現を自動的に削除するつもりはありません... 私の Web アプリでは、「悪い」と思われる単語が使用された場合に通知を受け取りたいです。

上記の置換部分と同じように、何かが次のように一致するかどうかを確認できます。

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

true渡された文字列にリスト内の単語が含まれている場合に返されます。

于 2010-07-09T03:25:57.623 に答える
4

私の仕事では、ソフトウェアに自動的に悪い言葉をフィルタリングする機能を追加しました (ソースをブラウズしていて、わいせつなページを含む配列に突然出くわすと、ちょっとショックです)。

ヒントの 1 つは、リストに対してテストする前にユーザー入力を前処理することです。そのため、前処理として、

  • 入力のすべてを大文字にする
  • 英数字以外のほとんどを削除します (つまり、スペースや句読点などを切り取るだけです)。
  • 次に、誰かが数字を文字に置き換えようとしていると仮定して、次のようにします: 0 を O に、9 を G に、5 を S に、などと置き換えます (工夫してください)。

そして、何人かの友達にそれを壊してもらいます。楽しいです。

于 2010-07-09T05:03:29.043 に答える
2

.Contains()メソッドが.Keys.Contains()になるため、たとえば辞書を使用するとコードがより効率的になるため、配列の代わりにHashKeyオブジェクトまたは>を使用することを検討できます。これははるかに効率的です。Dictionary<T1, T2これは、冒とく的な表現のリストが多い場合に特に当てはまります(いくつあるかわからない!:)

于 2010-07-09T03:30:34.540 に答える