意味悲鳴

PythonとかUnityとか.技術ブログでしたが,研究ブログにシフトしました.

Pythonで全角・半角記号をまとめて消し去る

これ,早いのか分かりませんけど,とりあえず手元の環境ではそれなりにうまく行っているので,書いておきます. このコードはPython3で書いています.Python2でも似たようなことをすれば動くみたいですが,若干違うので,後半の参考URLを見てください.

import unicodedata
import string

def format_text(text):
    text = unicodedata.normalize("NFKC", text)  # 全角記号をざっくり半角へ置換(でも不完全)

    # 記号を消し去るための魔法のテーブル作成
    table = str.maketrans("", "", string.punctuation  + "「」、。・")
    text = text.translate(table)

    return text

ざっくりとコードの説明を.unicodedata.normalize()は,Unicode文字列の互換等価性なるものに基いて文字列の置き換えをしてくれます.全角記号の文字には互換等価性があるらしく,ようはその等価性がある文字が半角記号らしいので,結果的にこの関数をかませると大体の記号が全角から半角になってくれます.

その後,str.maketrans()で実際に置き換える規則を指定します.この関数,第一引数と第二引数に文字列を指定すると,それぞれ特定の文字単位で置き換えられます.イメージとしては("abc","ABC")を指定した時,aがAに,bがBになります.が,今回はそこの引数は使わなくて,第三引数のみを使います.第三引数に指定した文字は削除してくれるので,ここに消し去ってほしい記号をぶっ込みます.

更にその後,作成したテーブルを元にtranslate()で実際に置き換えをして処理終了.お疲れ様でした.これで確実に全ての記号を消せたかというとちょっと微妙なのですが,大体の記号は消せるみたいです.

参考にしたURLは以下の通り.

Pythonでの文字列置換をマスターする - orangain flavor

Best way to strip punctuation from a string in Python - Stack Overflow

string - translate() takes exactly one argument (2 given) in python error - Stack Overflow

4. 組み込み型 — Python 3.5.2 ドキュメント

6.5. unicodedata — Unicode データベース — Python 3.5.2 ドキュメント

kh.log: Pythonで unicodedata.normalize を使って全角半角を正規化する方法