🦁

小学生向けチャットシステムで必要なNGワード検出方法のメモ

に公開

小学生に使って欲しくない言葉を送信不可とせよ

それには放送禁止用語辞書を参照すればおおよそ目的達成できる。これをDB化して言葉に含まれていたら送信不可と判定する。

参考サイト

(放送禁止用語一覧)

http://monoroch.net/kinshi/

さて、今はAIの時代なのでChatGPT 5 Thinkingに参考サイトを参照させて う⚪︎こ が含まれているかどうか確かめてみた。

私はバグを見つけた。「うんこれはやっかいだね」と言った。
ChatGPT:
思考時間: 1m 11s
判定:該当なし(ヒット 0件)
入力文
私はバグを見つけた。「うんこれはやっかいだね」と言った。
monoroch の「放送禁止用語一覧」(CSV/辞書データ含む)に照らして確認しましたが、該当語は見つかりませんでした。※同一覧は各社の自主規制の目安で、文脈によって配慮が必要な場合もあります。
Monoroch
+1
必要なら、この文のままでも一般的には問題ありませんが、語感を柔らかくする代替案も出せます(例:「うん」は「そうだね」等に置換)。次の文もチェックします?

該当語は見つかりませんでした!

文脈を考えてくれるから賢い。全部ChatGPTに投げて判定して貰えば良い!しかし、あまりに富豪的なアプローチ。

計算資源の無駄遣いなので私はこれは好きじゃない。

素直にgrepのようなアプローチの方がよいだろうか?だがそれだと、「うんこれはやっかいだね。」とチャットで言えなくなってしまう。これは日本語の表現を狭めてしまうので素直な文字列検索での判定は避けたい。

形態素解析で品詞分けして特定の品詞の時のみNGワードに反応するようにすれば良いのでは?

品詞分けにはMeCab

NGワードDBは参考サイトからダウンロードしてきてDBにコンバート

特定の品詞の時のみの判断はDBの各カラムにぽちぽちフラグを入力

次のようなフローで判定

  • MeCabでチャット文を分かち書き、品詞分け、
  • 分ち書きした単語をそれぞれNGワードDBを参照し、品詞に応じてNGワード判定
  • NGワードならば送信不可

だが、ChatGPTはもっと簡単そうな次のようなアプローチを出してきた。

ローカルで自動チェック(おすすめ:textlint)

開発環境で継続的に回すなら textlint のルールが便利です。

npm i -D textlint textlint-rule-no-hoso-kinshi-yogo

.textlintrc に:

{ "rules": { "no-hoso-kinshi-yogo": true } }

実行:

npx textlint path/to/*.md

このルールは monoroch の一覧を参照してヒット語を指摘してくれます。via GitHub

このtextlintは賢く

「うんこれはやっかいだね。」

無反応

「う⚪︎こはきたない。」

H-T@202502-2 ~ % npx textlint test2.txt

/Users/H-T/test2.txt

1:1  error  放送禁止用語「う⚪︎こ」が含まれています。 言い換え語: 大便, う⚪︎ち 備考: 幼児語の「う⚪︎ち」は可。2005/10/19「トリビアの泉」でう⚪︎こに関するネタが紹介され連呼された。バラエティの文脈では可か 参照: http://monoroch.net/kinshi/  no-hoso-kinshi-yogo

✖ 1 problem (1 error, 0 warnings, 0 infos)

「うんこれでいいじゃない。」

おわり

おわりではよくない、次回、自作textlint作成につづく

Discussion