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) #今日はボーリングに行ったー
以上です。