10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-07-22

はじめに

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

例えば、
グラビア⇒グ〇ビア
のように、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しているので、高速に動作させたい場合はダメだと思いますが、
気にしない場合は使えると思います。

10
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?