3

要するに:

JAVA/休止状態/AJAX/SpringMVC

ユーザーによって投稿されたすべてのコメントは、データベースに保存する前にサーバー側で読み取られ、不快なテキストが含まれている場合はコメントを拒否する必要があります。

不快なテキストのリストは非常に膨大です (おそらく数千)。このリストの例を見てください: http://onlineslangdictionary.com/lists/most-vulgar-words/

このリストを反復して次のような関数を実行するのはそれほど速くないと思います。このフィルターをより高速に実行する他の方法はありますか? 1,000 分の 1 のアイテムを検索すると、リソースの CPU/RAM に大きな影響を与えると思いますか? どんな提案も大歓迎です!

for(String offensiveText : offensiveTextList ){     
    if(commentText.contains(offensiveText )){
         //reject comment
    }
}

更新: 不快なアイテムのリストには、その中にいくつかの単語で構成されたアイテムを含めることができます (3 つの単語のテキストのように、ストップ ワードを含めることができます)。*&^% のようなアルファベット以外の文字も含めることができます。

コメントに不快な項目 (まったく同じ文字) が含まれている場合、コメントは拒否されたと見なされます。

4

6 に答える 6

6

これには、おそらく自然言語処理ライブラリを使用する必要があります。コメントのすべてのM単語をリストのN 個O(MN) = O(N^2)の不適切な単語と比較する場合、アルゴリズムの複雑さは になります。これは非常に高くなります。

Lucene スタックを見てください。たとえば、コメントをトークン化し、無意味な単語を削除して入力を減らす方法など、いくつかの本当に良いアイデアを見つけることができます。

また、次の論文もご覧ください。「事実情報と、ニュース記事に含まれる言葉やフレーズを含む侮辱的または虐待的なメッセージとの区別」

于 2012-08-14T08:25:21.727 に答える
0

より良い解決策は、テキストの単語をセットに入れ、セット全体をチェックして、交差点に要素があるかどうかを確認することだと思います。

また、最も一般的な英単語をチェックして、それらを削除することもできます (I、and、the など)。

于 2012-08-14T08:11:29.420 に答える
0

ユニークな不快な言葉を次々と追加した文字列を準備します。

次にチェックoffensivewordsString.contains(commentedText).

commentedText には主要な単語のみが含まれます

于 2012-08-14T08:14:33.480 に答える
0

単語リストも言語に基づいていますか? おそらく、最初にポスターの言語のみをスキャンし、それがクリーンであるかどうかを許可し、サーバーがビジーでないときに投稿後に他の不快な外国語の単語を検索するプロセスをスケジュールすることは価値があるでしょう.

于 2012-08-14T08:15:20.737 に答える
0

offensiveWordList を HashSet のようなある種のメモリ キャッシュにロードし、コメント テキストを単語に分割して、各単語が HashSet に存在するかどうかを確認できます。

ハッシュセット ルックアップは、攻撃リスト全体を毎回反復するよりも少ないリソースを使用します。

あなたの不快な言葉は比較的静的であると思います.リストがオンラインで更新されている場合は、スレッドに注意してください.

于 2012-08-14T08:16:03.143 に答える
0
  1. 攻撃的な言葉をすべてセットに入れます。

    Set<String> offensiveWords = new HashSet<String>();

  2. コメントから「the」、「a」、「by」、「on」などの単語をすべて削除します。

  3. String[] wordコメントをスペース文字で分割します。

  4. Set<String> offenciveWordsからの単語が含まれているかどうかを確認しますString[] word

これにより、はるかに高速なパフォーマンスが得られます。

于 2012-08-14T08:23:37.460 に答える