気が向いたら書くやつ

なんかプログラミングのことについて

Pythonで文字列から全角や半角の記号を全て取り除く

そんな方法はない。普通なら。
半角記号のみであれば正規表現で取り除くことは可能ですが、
Twitterやブログなどのあまりきれいでない文章を扱う場合、日本語の文章には全角記号が混じってきます。
そもそも日本語の文章には必須の句読点「、」「。」ですら全角記号です。
これらの全角記号を指定して除去するような便利な関数やライブラリは存在しません。

じゃあどうするか

1文字ずつ「これは記号でこれは記号じゃない」と指定してやるほかありません。
「おいおいそんなこと時間なくてできないよ」という方のためにPythonで書いたスクリプトを用意しました。
github.com

用意したと言っても、(公式ではありませんが)googleが公開しているコードをPython用に置換したに過ぎません。
github.com

したがってこのコードはApacheライセンスに従い、もとの著作権googleにあることをコード内に明記しておきます。
(何か問題があればお知らせください)

一応使い方ですが

>>>import unicode_script_map as usm
>>>usm.get_script_type("あ")
<ScriptType.U_Hiragana: 47>

これを文字列に応用し、記号除去に用いるならば

import unicode_script_map as usm
from unicode_script import ScriptType

test_str = "今日は郵便局に行った(^∀^)"
removed_str = "".join([c for c in test_str if usm.get_script_type(c) != ScriptType.U_Common])
print(removed_str)

#今日は郵便局に行った


当然ながらこの辞書に載っていない文字が入力されるとKeyErrorになります。

また、気をつけなければいけないのは日本語の長音である"ー"ですが、これが記号と判定されしまいます。
そのため長音を取り除きたくない場合は以下のように書く必要があります。

import unicode_script_map as usm
from unicode_script import ScriptType

test_str = "今日はボーリングに行ったー(^∀^)"
removed_str = "".join([c for c in test_str if usm.get_script_type(c) != ScriptType.U_Common or c == "\u30fc"])
print(removed_str)

#今日はボーリングに行ったー

以上です。