C#の「悪い」単語のための文字列を解析するための最良の方法は何ですか?
質問
私は何かを考えています:
foreach (var word in paragraph.split(' ')) {
if (badWordArray.Contains(word) {
// do something about it
}
}
.
しかし、私はもっと良い方法があると確信しています。
事前にありがとう!
アップデート 私は自動的に猥褻さを削除しようとは思わない...私のWebアプリのために、私が「悪い」という言葉が使用されている場合、通知を受けたいです。それから私はそれが合法であることを確認するために自分自身を見直します。ソートの自動フラグ付けシステム。
解決
あなたの道がうまくいくとともに、それは少し時間がかかるかもしれません。以前のような問題については、ここで>質問はC#の代わりにPHPについて話していますが、簡単に移植できると思います。
public string FilterWords(string inputWords) {
Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)");
return wordFilter.Replace(inputWords, "<3");
}
.
私は自動的に猥褻を削除しようと見ていません...私のWebアプリのために、私が「悪い」という言葉が使用されている場合は通知したいです。
上記の交換部分ほど、何かがそのように一致するかどうかがわかります。
public bool HasBadWords(string inputWords) {
Regex wordFilter = new Regex("(puppies|kittens|dolphins|crabs)");
return wordFilter.IsMatch(inputWords);
}
.
true
を返します。これに渡した文字列には、リスト内の単語が含まれています。
他のヒント
私の仕事では、私たちのソフトウェアにいくつかの自動悪い言葉フィルタリングを採用しています(それはソースを閲覧するための衝撃的なものです。そして、猥褻の数ページを含むアレイに突然走ること)。
1つのヒントは、誰かがあなたの人でこっそりしようとしているということで、あなたのリストに対してテストする前にユーザー入力を前処理することです。そこで前処理によって、我々は
- 入力内のすべての大文字
- ほとんどの英数字以外のものを削除する(つまり、スペース、または句読点などの単位を置くだけです。)
- 誰かが手紙の数字を離れようとしていると仮定して、次のようなことを行います。z、9でゼロをg、5で置き換えます。(Creative)
それからいくつかの友人がそれを壊そうとします。楽しいです。
辞書の使用としては、辞書の使用としてのHashKey
オブジェクトまたはDictionary<T1, T2
を使用することを検討して、.contains()メソッドは、より効率的であるために.kontains()になるため、コードをより効率的にすることができます。これはあなたが大きな宣教リストを持っているならば、これは特に当てはまります(わかりませんが、ある程度あるのはわかりません!:)