冒とく的なフィルターをどのように実装しますか?


207

私たちの多くは、ユーザー入力、検索クエリ、および入力テキストに冒とく的な表現や望ましくない言語が含まれている可能性がある状況に対処する必要があります。多くの場合、これは除外する必要があります。

さまざまな言語や方言で書かれた不適切な言葉のリストはどこにありますか?

適切なリストを含むソースで利用できるAPIはありますか?あるいは、いくつかのパラメータを使用して、「はい、これはクリーンです」または「いいえ、これはダーティ」と単純に言うAPIでしょうか。

a $$、azz、a55など、システムをだまそうとしている人々を捕まえるためのいくつかの良い方法は何ですか?

PHPのソリューションを提供する場合のボーナスポイント。:)

編集:プログラムの問題を単に回避するという回答への応答:

たとえば、ユーザーがパブリックイメージ検索を使用して、機密性の高いコミュニティプールに追加される写真を見つけることができる場合、この種のフィルターの場所があると思います。彼らが「ペニス」を検索できれば、彼らはうん、多くの写真を撮るでしょう。その写真が必要ない場合は、間違いなく確実な方法ではありませんが、その単語を検索語として使用しないことは優れたゲートキーパーです。そもそも単語のリストを取得するのは本当の問題です。

だから私は本当に、単一のトークンがダーティかどうかを把握し、単にそれを許可しない方法を参照しています。完全に陽気な「長い首のキリン」参照のような感情を邪魔しないでください。そこでは何もできません。:)


12
上位の答えがすべて存在し、プログラミングの挑戦からの敗北主義者の気晴らしであるのは残念です。Mechanical Turkのような「サイボーグ」計算サービスが勢いを増し、ほとんどすべてのソフトウェアがソーシャル化する中、コンテンツにレッドフラグを立ててモデレーターの注意を引くヒューリスティックを持つことは、これまで以上に重要です!
JasonSmith

10
特にi18nを使用している場合は、言語のコンテキストに注意してください。私はかつて、「バーチャルメディアでの視覚化」のためにトルコ語である「Sanal ortamdagörselleştirme」と呼ばれるコースにGoogleグループを設定しようとしました。タイトルに「肛門」という単語が含まれていたため、 Googleはそれを拒否するほど愚かでした。Sanal [tr] = Virtual [en]とGoogleは恥知らずに私を冒とく的な言葉で非難した :Dこのような奇妙なことが起こらないようにしてください。
edgerunner

スペイン語で単語を検索するとどうなりますか?実際にGoogle画像フィルターを回避することができます(他の言語にローカライズされている場合)。
new123456

別の提案は、これらの単語を禁止するのではなく、それらを使用するユーザーを登録することです。ユーザー/ IPが2つ、3つ、または必要な数を超える場合は、そのユーザーをブロックします。どちらでもないわけではありませんが、「pussy」ではなく「fluffy white bunny」と書くよりも、ブロックされてユーザー/ IP /両方を変更する必要がある方がはるかに不便だと思います。一部、ユーザーは使用できない単語や表現を知らないので、禁止されているため、さまざまな悪い単語を簡単に推測することはできません。
フランシスコプレセンシア2012

1
冒とく的なフィルターは悪い考えです。システムを
だまそ

回答:


176

わいせつフィルター:悪い考え、または信じられないほどの相互攻撃の悪い考え?

また、ToontownのSpeedChatの未定の歴史も忘れられません。「セーフワードのホワイトリスト」を使用しても、14歳のユーザーはすぐに次のように回避 できます。 」

結論:結局のところ、実装するシステムについては、人間によるレビュー(ピアかどうかにかかわらず)に代わるものは絶対にありません。ドライブバイを取り除くための基本的なツールを自由に実装してください。しかし、決定的なトロールについては、アルゴリズムベースではないアプローチが絶対に必要です。

特にJohn GabrielのGIFTに対抗するために、匿名性を取り除き、説明責任(Stack Overflowがうまく機能するもの)を導入するシステムも役立ちます。

また、冒とく的な冒とく的なリストをどこから入手できるかを尋ねました。チェックアウトするオープンソースプロジェクトの1つはDansguardianです。デフォルトの冒とく的なリストのソースコードを確認してください。プロキシ用にダウンロードできる追加のサードパーティフレーズリストもあります。これは、役立つ収集ポイントになる場合があります。

質問の編集に応じて編集します。何をしようとしているかを明確にしていただきありがとうございます。その場合、単純な単語フィルターを実行するだけであれば、2つの方法で実行できます。1つは、検閲するすべての禁止フレーズを含む単一の長い正規表現を作成し、それを正規表現で検索/置換するだけです。次のような正規表現:

$filterRegex = "(boogers|snot|poop|shucks|argh)"

そして、preg_match()を使用して入力文字列に対して実行し、ヒットの卸売りテストを行います。

またはpreg_replace()を使用して空白にします。

また、これらの関数を単一の長い正規表現ではなく配列でロードすることもできます。長い単語リストの場合は、より扱いやすくなる場合があります。配列をどのように柔軟に使用できるかについての良い例については、preg_replace()を参照してください。

追加のPHPプログラミング例については、このページを参照して、*打ち切り単語の中央の文字から外れる単語フィルタリングのやや高度なジェネリッククラス、およびPHPの例も含まれるこの以前のスタックオーバーフローの質問(主な重要な部分は、 SQLベースのフィルター処理された単語アプローチ-不要な場合は、リートスピーク補償器を省略できます)。

また最初に単語リストを取得するのが本当の問題です。」-以前のDansgaurdianリンクのいくつかに加えて、458単語のこの便利な.zipが役立つ場合があります。


@JPLemme:はい、そうするべきです-私は後で[sic]を追加するべきでした。:)
HanClinto 2008

"クラブペンギン"は、毎日何百ものエントリを冒とくフィルターに追加します。raphkoster.com
Frank Farmer

6
正規表現オプションを囲む単語境界ラッパーは、clbutticミスを防ぎます
cjk

@ck:スペルが間違っている単語 "F * ckkkk yo 'asssss"を除外できるかどうか心配していない場合のみ:)私のトロールが非常に正確なスペルを持っているとは確信していません。
HanClinto 2010

1
あなたはおなじみの馬の口から「ふわふわ白バニー」の話を聞きたい場合、それは今Podcastエピソードです:socialmediaclarity.tumblr.com/post/70499341079/...
F.ランドールファーマー

44

この質問はかなり古いですが、よくある質問です...

冒とくフィルタには理由と明確なニーズの両方がありますが(Wikipediaのエントリはこちらを参照)、非常に明確な理由により、100%正確とは言えません。コンテキスト正確さ

それは(完全に)達成しようとしていることに依存します-それは最も基本的なことですが、おそらく「7つの汚い言葉」をカバーしようとしているのです。いくつかのビジネスでは、最も基本的な冒とく的な表現をフィルタリングする必要があります。言葉、URL、さらには個人情報などを誓うが、他の人は不正なアカウントの名前付け(Xbox liveがその一例です)を防ぐ必要があります...

ユーザーが作成したコンテンツには、不適切な言葉が含まれているだけでなく、次のような不適切な参照が含まれている可能性があります。

  • 性行為
  • 性的指向
  • 宗教
  • 人種
  • 等...

そして潜在的に、複数の言語で。Shutterstockはこれまでに10言語で基本的なダーティワードリストを開発してきましたが、それでもまだ基本的であり、「タグ付け」のニーズに重点を置いています。他にも多くのリストがウェブ上にあります。

私はそれが定義されて科学ではないことを受け入れ答えに同意するよう言語は絶えず進化している課題が、90%のキャッチ率が0%よりも優れています1。それは純粋にあなたの目標に依存します-あなたが達成しようとしていること、あなたが持っているサポートのレベル、そして異なるタイプの冒とくを取り除くことがどれほど重要であるか。

フィルターを作成する際には、以下の要素と、それらがプロジェクトにどのように関連するかを考慮する必要があります。

  • 語句
  • 頭字語(FOAD / LMFAOなど)
  • 検知(「mishit」、「scunthorpe」、「titsworth」などの単語、場所、名前)
  • URL(ポルノサイトは明らかなターゲットです)
  • 個人情報(メール、住所、電話など-該当する場合)
  • 言語の選択(通常はデフォルトで英語)
  • モデレート(ユーザーが作成したコンテンツとやり取りできる方法、およびそれで何ができるか)

90%以上の冒とくをキャプチャする冒とくフィルターを簡単に作成できますが、100%になることはありません。それは不可能です。100%に近づけるほど、難しくなります...過去に1日あたり50万を超えるリアルタイムメッセージを処理する複雑な冒とく的なエンジンを構築したことがあれば、次のアドバイスを提供します。

基本的なフィルターには以下が含まれます。

  • 該当する冒とくのリストの作成
  • 冒とく的な表現の派生に対処する方法の開発

適度に複雑なファイラーには、(基本的なフィルターに加えて)以下が含まれます。

  • 複雑なパターンマッチングを使用して拡張派生を処理する(高度な正規表現を使用)
  • Leetspeak(l33t)への対処
  • 検知への対処

複雑なフィルターには、次の数が含まれます(中程度のフィルターに加えて)。

  • ホワイトリストとブラックリスト
  • フレーズ/用語の単純ベイズ推論フィルタリング
  • Soundex関数(単語が別の単語のように聞こえる場合)
  • レーベンシュタイン距離
  • ステミング
  • 人間によるモデレーターは、フィルタリングエンジンを例に基づいて学習したり、ガイドがないと一致が十分に正確でない場合に役立つよう支援します(自己/継続的に改善するシステム)
  • 多分何らかの形のAIエンジン

28

私はこれに適したライブラリを知りませんが、あなたが何をするにせよ、あなたが物事を通過させる方向に誤りを犯すことを確認してください。「mpassell」をサブストリングとして「ass」が含まれているため、ユーザー名として「mpassell」を使用できないシステムを扱ってきました。これは、ユーザーを疎外するための優れた方法です。


17
または空飛ぶ宇宙船のゲームで「コックピット」を禁止する
新韓

24

私の面接中に、面接を受けていたCTOという会社が、Javaで書いた単語/ウェブゲームを試してみました。オックスフォード英語辞典全体の単語リストのうち、最初に推測された単語は何ですか?

もちろん、英語で最も汚い言葉。

どういうわけか、私はまだ求人を得ましたが、私は冒とく的な言葉のリスト(このリストとは異なりません)を追跡し、すべての悪い言葉なしで(リストを見なくても)新しい辞書を生成する簡単なスクリプトを書きました。

あなたの特定のケースでは、検索を実際の単語と比較することは、そのような単語リストに行く方法のように聞こえると思います。代替のスタイル/句読点はもう少し作業が必要ですが、ユーザーが問題になるほど頻繁にそれを使用することはないと思います。


8
話題外ですが、最も悪い言葉は何ですか?私は常にcワードまたはnワードと考えていましたが、人々はfワードが次のようであると思っていると思います
Jeff

2
「ユーザーがこれを問題になるほど頻繁に使用することはないだろう」希望を生かしてください。ユーザーがフィルターに出くわしたら、迂回の方法を見つけることに取り組みます。それは、文字を数字で置き換えてスペースの奇妙な配置にするなどの単純なものです。
BryanH 2012年

21

冒とく的なフィルタリングシステムは完璧ではありません。たとえプログラマーが余計なことをしていなくても、すべてのヌード開発に遅れをとっていないからです。

とは言っても、根本的な問題は現在のテクノロジーではほとんど扱いにくい言語理解であるため、「いたずらな言葉」のリストは他のリストと同様に機能する可能性があります。

したがって、唯一の実用的な解決策は2つあります。

  1. 辞書を頻繁に更新する準備をしてください
  2. 人間の編集者を雇って、誤検出(「クラシック」ではなく「clbuttic」など)と誤検出(おっと!見逃した!)を修正する

1
どちらかの側にスペースがある単語を検出し、最後に停止します。
David D

1
H3ll人はいない、それは最も些細な場合にのみ機能する。ここでは人間を扱っており、非常に賢いです:)
スティーブンA.ロウ

14

不快なユーザー入力を防ぐ唯一の方法は、すべてのユーザー入力を防ぐことです。

ユーザー入力の許可を主張し、モデレートが必要な場合は、人間のモデレーターを組み込みます。



7

「トリック・ザ・システム」サブクエスチョンに関しては、検索を実行する前に、「悪い単語」リストとユーザーが入力したテキストの両方を正規化することで対処できます。たとえば、一連の正規表現(またはPHPにそれがある場合はtr)を使用して[z $ 5]を "s"、[4 @]を "a"などに変換し、正規化された "bad word"リストを正規化されたものと比較します。テキスト。現時点では実際のケースは考えられませんが、正規化によって追加の誤検知が発生する可能性があることに注意してください。

より大きな課題は、人々が「ペンは剣よりも強い」と引用しながら「ペニス」をブロックできるようなものを思いつくことです。


14
Experts-exchange.comとpen-island.comを忘れないでください。これらのサイトのURLにはかつてハイフンが含まれていませんでした。
BryanH 2013

7

ローカライゼーションの問題に注意してください。ある言語での俗語は、別の言語では完全に普通の単語かもしれません。

この1つの現在の例:ebayは、辞書のアプローチを使用して、フィードバックから「悪い言葉」をフィルタリングします。「これは完璧な取引でした」(「das war eine perfekte Transaktion」)のドイツ語の翻訳を入力しようとすると、ebayは不適切な言葉によるフィードバックを拒否します。

どうして?「was」のドイツ語の単語は「戦争」であり、「戦争」は「悪い単語」のebay辞書にあるからです。

ローカリゼーションの問題に注意してください。


6

Digg / Stackoverflowのように、ユーザーがわいせつなコンテンツに反対投票/マークを付けることができる場合は、そうします。

次に、「いたずら」なユーザーを確認し、ルールに違反した場合はブロックするだけです。


4

私はパーティーに少し遅れますが、これを読んだ人にはうまくいくかもしれない解決策があります。これはphpではなくjavascriptですが、正当な理由があります。

完全な開示、私はこのプラグインを書いた...

いずれかの方法。

私が行ってきたアプローチは、ユーザーが冒とく的なフィルタリングを「オプトイン」できるようにすることです。基本的に冒とく的な表現はデフォルトで許可されますが、ユーザーが読みたくない場合は、そうする必要はありません。これは、「l33t sp3 @ k」の問題にも役立ちます。

コンセプトはシンプルです クライアントのアカウントで冒とく的なフィルタリングが有効になっている場合に、サーバーによって挿入されるプラグイン。そこから、誓いを消し去るのはほんの数行の単純な行です。

こちらがデモページです
https://chaseflorell.github.io/jQuery.ProfanityFilter/demo/

<div id="foo">
    ass will fail but password will not
</div>

<script>
    // code:
    $('#foo').profanityFilter({
        customSwears: ['ass']
    });
</script>

結果

***は失敗しますが、パスワードは失敗しません


ここだ jsFiddle作業のデモこの回答を同行するが。
Chase Florell 2015

とてもナイーブ。フィルタリングされませんでしたa$$
Winger Sendon

3
@EmperorAimanそれはl33t話すを除外することを意図されていませんでした。負けた戦いなので、フィルターをかけることはお勧めしません。私が投稿した冒とくフィルターは、「ユーザーが冒とくフィルタリングに「オプトイン」できるように作成されています」。つまり、デフォルトで冒とく的な表現を許可するサイトで使用するのが最適です。をフィルタリングする場合はa$$、それをフィルターリストに追加します。
Chase Florell

4

en、ar、cs、da、de、eo、es、fa、fi、fr、hi、hu、it、ja、ko、nl、no、pl、pt、ru、svの12言語で2200の悪い単語を収集しました、th、tlh、tr、zh。

MySQLダンプ、JSON、XMLまたはCSVオプションが利用可能です。

https://github.com/turalus/openDB

このSQLをDBで実行し、ユーザーが何かを入力するたびに確認することをお勧めします。


2

しないでください。それは問題を引き起こすだけです。私が冒とく的なフィルターを使用して行った独断的な個人的な経験の1つは、私が「橋を越えてハンコックに数時間向かった」またはそのための何かを述べたためにIRCチャンネルからキック/禁止されたときです。


2

私は、この議論の上位にあるHanClintoの投稿に同意します。私は通常、正規表現を使用して入力テキストを文字列照合します。そして、これは無駄な作業です。最初に述べたように、「ブロックされた」リストでネット上で人気のあるすべてのトリック形式を明示的に説明する必要があるためです。

余談ですが、検閲の倫理について議論している人もいますが、ウェブ上で何らかの形が必要であることに同意する必要があります。一部の人々は単に下品な投稿を楽しんでいます。なぜなら、それは大勢の人々に対して即座に不快である可能性があり、作者の側でまったく考えを必要としないからです。

アイデアありがとうございます。

HanClintoが支配する!


2

フィルター処理したいいくつかの悪い単語の良いMYSQLテーブルができたら(このスレッドのリンクの1つから始めました)、次のようなことができます。

$errors = array();  //Initialize error array (I use this with all my PHP form validations)

$SCREENNAME = mysql_real_escape_string($_POST['SCREENNAME']); //Escape the input data to prevent SQL injection when you query the profanity table.

$ProfanityCheckString = strtoupper($SCREENNAME); //Make the input string uppercase (so that 'BaDwOrD' is the same as 'BADWORD').  All your values in the profanity table will need to be UPPERCASE for this to work.

$ProfanityCheckString = preg_replace('/[_-]/','',$ProfanityCheckString); //I allow alphanumeric, underscores, and dashes...nothing else (I control this with PHP form validation).  Pull out non-alphanumeric characters so 'B-A-D-W-O-R-D' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/1/','I',$ProfanityCheckString); //Replace common numeric representations of letters so '84DW0RD' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/3/','E',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/4/','A',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/5/','S',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/6/','G',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/7/','T',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/8/','B',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/0/','O',$ProfanityCheckString); //Replace ZERO's with O's (Capital letter o's).

$ProfanityCheckString = preg_replace('/Z/','S',$ProfanityCheckString); //Replace Z's with S's, another common substitution.  Make sure you replace Z's with S's in your profanity database for this to work properly.  Same with all the numbers too--having S3X7 in your database won't work, since this code would render that string as 'SEXY'.  The profanity table should have the "rendered" version of the bad words.

$CheckProfanity = mysql_query("SELECT * FROM DATABASE.TABLE p WHERE p.WORD = '".$ProfanityCheckString."'");
if(mysql_num_rows($CheckProfanity) > 0) {$errors[] = 'Please select another Screen Name.';} //Check your profanity table for the scrubbed input.  You could get real crazy using LIKE and wildcards, but I only want a simple profanity filter.

if (count($errors) > 0) {foreach($errors as $error) {$errorString .= "<span class='PHPError'>$error</span><br /><br />";} echo $errorString;} //Echo any PHP errors that come out of the validation, including any profanity flagging.


//You can also use these lines to troubleshoot.
//echo $ProfanityCheckString;
//echo "<br />";
//echo mysql_error();
//echo "<br />";

これらのすべての置換を行うためのより効率的な方法があると確信していますが、それを理解するのに十分なほど賢くはありません(これは非効率ではありますが、問題なく動作するようです)。

私は、ユーザーが登録できるようにし、必要に応じて、人間を使ってフィルタリングし、冒とく的な表に追加したりするべきだと思います。それはすべて、偽陽性(悪い単語としてフラグが立てられた)と偽陰性(悪い単語が通り抜ける)のコストに依存します。最終的には、フィルタリング戦略における積極性または保守性を管理する必要があります。

ワイルドカードを使用する場合も、意図したよりも煩雑になることがあるので、注意が必要です。


1

率直に言って、「システムをだます」という言葉を彼らに見せて、代わりに彼らを禁止したいのですが、それは私だけです。しかしそれはまたプログラミングをより簡単にします。

私がやろうとしていることは、次のように正規表現フィルターを実装する/[\s]dooby (doo?)[\s]/iこと/[\s]doob(er|ed|est)[\s]/です。これらはassuagedのような単語をフィルタリングすることを防ぎますが、これは完全に有効ですが、他のバリアントの知識と、新しいものを学ぶ場合は実際のフィルターを更新することも必要になります。明らかにこれらはすべて例ですが、自分で行う方法を決定する必要があります。

私は自分が知っているすべての単語を入力するつもりはありません。実際に知りたくないときもそうです。


1

私はこの主題の無益さに同意しますが、フィルターが必要な場合は、Ningのツゲをチェックしてください。

Boxwoodは、テキスト内の複数の単語をすばやく置き換えるためのPHP拡張機能です。大文字と小文字を区別するマッチングと大文字と小文字を区別しないマッチングをサポートします。動作するテキストがUTF-8としてエンコードされている必要があります。

詳細については、このブログ投稿も参照してください。

Boxwoodを使用すると、検索語句のリストを好きなだけ長くすることができます。検索する語句のリストにさらに多くの語句があるため、検索と置換のアルゴリズムが遅くなることはありません。これは、すべての検索用語のトライを作成し、件名のテキストを1回だけスキャンし、トライの要素を下に移動して、テキスト内の文字と比較することで機能します。US-ASCIIとUTF-8、大文字と小文字を区別するか区別しないマッチングをサポートし、いくつかの英語中心の単語境界チェックロジックを備えています。


1

私は、冒とく的なフィルターを作成するために、3つの主要なコンポーネントが必要であると結論付けました。少なくとも、それは私がやろうとしていることです。これらは次のとおりです。

  1. フィルター:ブラックリスト、辞書、またはそのようなものに対して検証するバックグラウンドサービス。
  2. 匿名アカウントを許可しない
  3. 不正行為を報告

ボーナスは、正確な乱用レポーターで貢献した人に何らかの報酬を与え、違反者を罰することです。たとえば、アカウントを一時停止します。


1

また、ゲームの後半に、いくつかの調査を行って、ここで偶然見つけました。他の人が述べたように、それが自動化されている場合はほぼ不可能に近いですが、設計/要件が場合によっては(常にではないが)人の対話を伴い、冒涜であるかどうかを検討する場合は、MLを検討することができます。 https://docs.microsoft.com/en-us/azure/cognitive-services/content-moderator/text-moderation-api#profanityは、現在いくつかの理由で現在の選択肢です:

  • 多くのローカリゼーションをサポート
  • 彼らはデータベースを更新し続けるので、最新のスラングや言語に追いつく必要はありません(メンテナンスの問題)
  • 可能性が高い(つまり90%以上)場合は、実用的に否定できます。
  • 冒とく的であるかどうかわからないフラグを引き起こすカテゴリを観察し、誰かがそれをレビューして、冒とく的であるかどうかを教えることができます。

私のニーズでは、それは他のユーザーがユーザー名を表示する可能性がある/するパブリックフレンドリーな商用サービス(OK、ビデオゲーム)に基づいていますが、不快なユーザー名を拒否するには、冒とく的なフィルターを通過する必要があります。これの悲しい部分は、ユーザー名が通常複数の単語が連結された単一の単語(最大N文字)であるため、古典的な "clbuttic"問題が発生する可能性が高いです。 HasProfanity = trueですが、カテゴリ確率の1つに高いフラグを立てる場合があります。

OPが尋ねたように、「a $$」はここに画像の説明を入力してくださいどうですか、フィルターを通過したときの結果は次のとおりです。ご覧のように、冒とく的ではないと判断しましたが、そうである可能性が高いため、推奨としてフラグを立てますレビュー(人間の相互作用)。

可能性が高い場合は、「申し訳ありませんが、その名前は既に使用されています」(そうでない場合でも)を返すことができます。これにより、反検閲の担当者や他の人にとって不快にならないようにすることができます。人間によるレビューを統合するか、「ユーザー名がライブ運用部門に通知されたので、ユーザー名がレビューされて承認されるか、別のユーザー名を選択するのを待つことができます」を返す。または何でも...

ちなみに、このサービスのコスト/価格は私の目的ではかなり低くなっていますが(ユーザー名はどのくらいの頻度で変更されますか?)、繰り返しになりますが、OPの設計はより集中的なクエリを要求し、支払い/サブスクライブには理想的ではないかもしれませんMLサービス、または人間による確認/相互作用はできません。それはすべてデザインに依存します...しかし、デザインが法案に適合している場合、おそらくこれがOPのソリューションになる可能性があります。

興味があれば、今後コメントに短所を記載できます。


-2

冒とく的なフィルターは悪い考えです。その理由は、すべての悪態をつかむことができないからです。試行すると、誤検知が発生します。

言葉を引く

F-Wordをキャッチしたいとしましょう。簡単ですよね?さて、見てみましょう。

文字列をループして「ファック」を見つけることができます。残念ながら、人々は最近フィルターをだます。冒とく的なフィルターは「fuk」を拾いませんでした。

複数のスペルや単語の異形を確認することもできますが、コードのパフォーマンスが低下します。F-Wordをキャッチするには、「fuc」、「Fuc」、「fuk」、「Fuk」、「F ***」などを探す必要があります。リストは次々と表示されます。

無罪を避ける

では、大文字と小文字を区別せずにスペースを無視して、「F u C k」をキャッチできるようにしますか?それは良い考えのように聞こえるかもしれませんが、誰かは「FUCK」で冒とく的なフィルターをバイパスすることができます

句読点は無視します。

Hell o、there!」のような文があるので、これは実際の問題です。「地獄」、「お尻は?」とピックアップします。「お尻」としてピックアップします。

また、「Cons tit ution 」など、フィルタから除外する必要のある単語がたくさんあります。これには「tit」が含まれているためです。

「フラック」などの代替語を使用することもできます。あなたもそれをブロックしますか?「ペニス」の「ペンは」はどうですか?プログラムには、文字列が良いか悪いかを知るための人工知能がありません。

冒とく的なフィルターは使用しないでください。それらは開発が難しく、クロールと同じくらい遅いです。


2
-1はOPの質問には答えず、ほとんどが意見コメントです。このユーティリティの多くの有効な使用例があります。たとえば、会社が恥ずかしくないように、監査前にソースコードを一掃します。
davidjmcclelland 2017年

-3

しないでください。

なぜなら:

  • Clbuttic
  • 冒とく的な表現はOMG EVILではありません
  • 冒とく的な表現は効果的に定義できない
  • ほとんどの人はおそらく、冒とく的な表現から「保護されている」ことに感謝していません。

編集:私は「検閲は間違っている」と述べたコメント者に同意しますが、それはこの回答の性質ではありません。


90
この非回答に対する10の賛成票?冒とく的な表現をフィルタリングしたい人は、道徳的な半分の機知に違いないのでしょうか。やれやれだぜ。これは有効な質問であり、ぎこちないドライブバイレスポンスは報われるべきではありません。-1。
Kluge

12
@Kludge:あなたは「道徳的なハーフウィット」と言った唯一の人です。実際、私は冒とく的なフィルターを実装することの道徳的な性質については何も言っていません。ミッチは私が「しないでください」と言った理由の一部を持ち出します、そしてそれは卑劣なドライブバイではありません。「しないでください」が「どうすればいいですか...」に対する正しい答えになる場合があります。[続き]
まぶたがない2008年

2
@eyelidlessness:たぶん、私があなたの1語の答えを読みすぎているのは正しい。しかし、あなたは詳しく説明しなかったので、あなたの異議が道徳的根拠にあるのか、技術的根拠にあるのかはわかりませんでした。「どんな形の検閲も悪い」というコメントにうんざりしていることは認めます。
Kluge

5
-1。「しない」は道徳的または技術的な問題に関係なく有効な答えではありません。コンテンツの性質に基づいてコンテンツをフィルタリングすることが完全に適切である場合はたくさんあります。女性の下着を販売し、「レビュー」機能を提供するeコマースサイトを想像してみてください。あなたは本当に思春期前の男の子があなたのサイトをゴミでポイ捨てしていますか?もちろん違います。また、人間による承認プロセスを行うのは面倒すぎるかもしれません。ゴミでレビューを拒否する単純なフィルターは良いことです。
pspahn 2012

3
@pspahn、「してはいけない」は、間違った問題の解決策を求める質問に対する正しい答えです。コンテンツをモデレートする必要がある正当なケースは確かにありますが、「プロパニティーフィルター」はそうではありません。
まぶたのない2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.