Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What are the problem?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
10
Help us understand the problem. What are the problem?