Zalgoテキストの除去と削除方法

正規表現、Unicodeカテゴリ、様々なプログラミング言語を使用して、プログラム的にZalgo結合マークをテキストから削除する技術を学びます。

Practical Usage

詳細な説明

Zalgoテキストの削除

Zalgoの除去とは、テキストからすべての結合ダイアクリティカルマークを削除し、クリーンで読みやすい形式に復元することです。

JavaScriptの正規表現アプローチ

function stripZalgo(text) {
  return text.replace(/[\u0300-\u036f]/g, '');
}

// より広範なカバレッジ(拡張結合マーク):
function stripZalgoFull(text) {
  return text.replace(
    /[\u0300-\u036f\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/g,
    ''
  );
}

Python

import unicodedata

def strip_zalgo(text):
    return ''.join(
        c for c in text
        if unicodedata.category(c) != 'Mn'
    )

正当なダイアクリティクスの保持

すべての結合マークを除去すると、正当なアクセント(é, ñ, ü)も削除されます。正当なダイアクリティクスを保持しながら過剰分を除去するには:

function stripExcessCombining(text, maxPerChar = 2) {
  let result = '';
  let combiningCount = 0;
  for (const char of text) {
    if (/\p{Mn}/u.test(char)) {
      combiningCount++;
      if (combiningCount <= maxPerChar) result += char;
    } else {
      combiningCount = 0;
      result += char;
    }
  }
  return result;
}

ユースケース

Zalgoの除去は、チャットアプリケーション、フォーラムソフトウェア、SNSプラットフォーム、悪意のあるまたは破壊的なUnicode結合マークを含む可能性のあるユーザー生成コンテンツを処理するテキスト処理パイプラインに不可欠です。

試してみる — Zalgo Text Generator

フルツールを開く