汎用NGワード判定ツール。ハッシュ化されたNG辞書(SHA-256ハッシュの改行区切りリストをgzip圧縮したもの)を用いて、 任意の長さのテキスト中に含まれるNGワードを部分一致で検出する。辞書側は平文の単語を一切保持しないため、 辞書ファイル自体からNGワードを読み取ることはできない。
入力は文字列(CLI引数)・ファイル(任意の文字コード)の両方に対応。ファイル読み込み時は to-utf8.php と同一のバイトパターンヒューリスティックで CP932 / EUC-JP / UTF-8 を自動判定し、UTF-8へ正規化してから判定する(mbstring不在の環境でも動作)。
php ng-check.php "<text>" [options]
php ng-check.php --file=<path> [options]
| オプション | 説明 |
|---|---|
--file=PATH |
入力をファイルから読み込む(テキスト引数と排他、両方指定時はこちらを優先) |
--hashes=PATH |
NG辞書(gzip圧縮ハッシュリスト)のパス(省略時: ./hashes-txt.gz) |
--from=AUTO|CP932|EUCJP |
ファイル読み込み時の変換元エンコーディング(省略時AUTO) |
--min-len=N |
部分一致探索の最小文字数(省略時2) |
--max-len=N |
部分一致探索の最大文字数(省略時16) |
--mask-char=CHAR |
伏字に使う文字(省略時「〇」) |
--out=PATH |
置換後テキストの出力先ファイル(省略時は標準出力に表示のみ) |
-h, --help |
ヘルプを表示 |
終了コード: 0=NG該当なし, 3=NG該当あり, 1=引数/入力エラー
php ng-check.php "チェックしたい文章" --hashes=./hashes-txt.gz
php ng-check.php --file=input.txt --from=CP932 --out=masked.txt
テキストを文字単位に分割し、--min-len〜--max-len文字の全ての部分文字列をSHA-256化して辞書ハッシュ集合と照合する
(スライディングウィンドウ方式)。左から右へ貪欲に走査し、一致した位置では最長一致を優先して1回だけマスクし、
次はその直後から再開する(重複検出・多重置換を避けるため)。
このリポジトリにはNG辞書自体は含まれない。利用者が用意したSHA-256ハッシュの改行区切りリストをgzip圧縮したファイルを
--hashesで指定して使用する。
MIT License(LICENSE参照)
開発経緯は doc/changelog.md を参照。