グラビア⇒グ〇ビア、みたいにpythonで禁止ワード/NGワードを置換/隠す


はじめに

タイトルの通り、禁止ワードを置換する方法を説明します。

例えば、
グラビア⇒グ〇ビア
のように、NGワード2文字目を置換します。

NGワードの準備

NGワードをかき集めたNG_word.txt みたいなものを用意します。
こんな感じ

NG_word.txt
喫煙 殺人 注射器 密売 密造 グラビア

あんまり書きすぎるとこの記事がバンされちゃうので、ここらへんで。
以下みたいに改行区切りでもよいです。

NG_word.txt
喫煙
殺人
注射器
密売
密造
グラビア

NGワード/禁止ワード一覧って、ぱっと検索した感じだとあまり見つからなかったのですが、
例えば、
スパム対策用 禁止ワード・NGワード集(vector.co.jpのリンクです)
とかが参考になると思います。
ちょっとワードが少ない上に2009年のものなので古い気もしますが、他にあれば教えてください。

実際に置換する

次の関数を作りました。
雑ですが、動きはしました。

def change_NGword(string, filename="NG_word.txt", encoding="UTF-8", huseji="◯"):
    # NGワードを読み取り
    f = open(filename, "r", encoding=encoding)
    change_str = f.read()
    f.close()

    # 単語ごとに区切る
    change_list = change_str.split()
    for change_i in change_list:
        # 単語の2文字目を伏せ文字にに置換、ただし、NGワードが1文字の場合は1文字目を伏せ文字に置換
        if len(change_i) == 1: # 1文字の場合:殺⇒○ のようにする
            string = string.replace(change_i, huseji)
        elif len(change_i) == 2: # 2文字の場合:殺人⇒殺○ のようにする
            string = string.replace(change_i, change_i[0] + huseji)
        else: # 3文字以上の場合:殺人鬼⇒殺○鬼 のようにする
            string = string.replace(change_i, change_i[0] + huseji + change_i[2:])
    return string

# テスト
print(change_NGword("これは健全な文章です"))
print(change_NGword("喫煙しているグラビアアイドル"))
print(change_NGword("注射器の使いまわし"))
実行結果
これは健全な文章です
喫◯しているグ◯ビアアイドル
注◯器の使いまわし

関数の中身をちょっと解説すると
1、NGファイルの読み込み
2、読みこんだNGファイルを単語ごとに区切りリストにする
3、チェックしたい文字列を単語リストで全探索して置換する

という手順です。

ファイル読み込みでエラーが起きたら、文字コードを適当に変えて試してください。
関数呼び出しの度にファイルをopen→closeしているので、高速に動作させたい場合はダメだと思いますが、
気にしない場合は使えると思います。