Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで文中の単語をアスタリスク(伏せ字)に置き換える方法

プログラムを活用すると、文章に含まれる特定の単語をアスタリスク(*)に置き換えることで、暴力的な表現や不適切な言葉などを簡単に伏せ字にすることができます。

処理のイメージ

たとえば、次のような文章があったとします。

"Go feed all the ducks in the lake"

ここで「ducks」という単語をアスタリスクに置き換えたい場合、最終的な出力は次のようになります。

"Go feed all the ***** in the lake"

replace関数を使った実装

この機能は、Pythonの文字列メソッドである replace() を使うことでシンプルに実現できます。ポイントは、置き換え後のアスタリスクの数を、対象の単語の文字数と同じにすることです。len(word) で単語の長さを取得し、"*" * len(word) とすることで、長さに応じたアスタリスクを生成できます。

サンプルコード

def replaceWithAsterisk(sent, word):
    # replace関数で該当する単語を探し、
    # 単語の長さと同じ数のアスタリスクに置き換える
    return sent.replace(word, "*" * len(word))

sent = "Go feed all the ducks in the lake"
censored_sent = replaceWithAsterisk(sent, "ducks")

print(censored_sent)

実行結果

このコードを実行すると、以下の出力が得られます。

Go feed all the ***** in the lake

補足:大文字・小文字を区別せずに置き換えるには

標準の replace() メソッドは大文字・小文字を区別するため、「Ducks」のように大文字が混ざる場合は一致しません。そのようなケースでは、正規表現モジュール re を使うと便利です。

import re

def replaceWithAsteriskIgnoreCase(sent, word):
    pattern = re.compile(re.escape(word), re.IGNORECASE)
    return pattern.sub("*" * len(word), sent)

sent = "Go feed all the Ducks in the lake"
print(replaceWithAsteriskIgnoreCase(sent, "ducks"))
# 出力: Go feed all the ***** in the lake

このように re.IGNORECASE フラグを指定すれば、大文字・小文字の違いを無視して確実に伏せ字へ置き換えられます。掲示板やチャットアプリなどでNGワードフィルターを実装する際に役立つテクニックです。

  1. 文中の単語をアスタリスクに置き換えるJavaプログラム

    文章の中から特定の単語を見つけて、アスタリスク(*)に置き換えたい場面は意外と多くあります。例えば、不適切なワードのマスキングや、ネタバレ防止のテキスト加工などが挙げられます。本記事では、そのような処理を実現するJavaプログラムのサンプルコードと、その動作の仕組みをわかりやすく解説します。サンプルコードpublic class Demo{   static String replace_word(String sentence, String pattern){      String[] word_l

  2. Pythonでn個のノードから構成できる二分探索木(BST)の数を求める方法

    問題の概要互いに異なるn個のノードが与えられたとき、それらを二分探索木(BST:Binary Search Tree)として配置する方法が何通りあるかを求めることを考えます。二分探索木には「左部分木には常に親より小さい値が、右部分木には常に親より大きい値が格納される」という重要な性質があります。この問題を解くには、カタラン数(Catalan Number)を利用します。カタラン数 C(n) は、n個の異なるキーから構成できる二分探索木の総数を正確に表すことが知られています。計算式は次のとおりです。$$C(n)=\frac{(2n)!}{(n+1)!\times n!}$$例えば、入力が n =