punctuationとは、記号文字列のことです。
str.translate()
を使う方法と、正規表現を使う方法で行ってみます。
str.translate() を使うPunctuationの削除
str.translate()
を使い、Punctuation を一括で削除します。
str.translate()
は、ある文字列内の複数の文字列を一括で変換する関数で、 str.translate()
を使わない場合よりも高速に変換を行うことができます。
Punctuationの取得
Pythonでは、string.punctuation
で、まとめて取得することができます。
string.punctuation
C
ロケールにおいて、句読点として扱われる ASCII 文字の文字列です。
https://docs.python.org/ja/3.7/library/string.html#string.punctuation
コンソールで確認すると、 string.punctuationには、以下の文字列が含まれています。
>>> import string >>> string.punctuation '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
str.maketrans()
まず、str.maketrans()
で、変換のためのテーブルを作ります。
staticstr.maketrans
(x[, y[, z]])
この静的メソッドはstr.translate()
に使える変換テーブルを返します。
引数を 1 つだけ与える場合、それは Unicode 序数 (整数) または文字 (長さ 1 の文字列) を、Unicode 序数、(任意長の) 文字列、またはNone
に対応づける辞書でなければなりません。このとき、文字で指定したキーは序数に変換されます。
引数を 2 つ指定する場合、それらは同じ長さの文字列である必要があり、結果の辞書では、x のそれぞれの文字が y の同じ位置の文字に対応付けられます。第 3 引数を指定する場合、文字列を指定する必要があり、それに含まれる文字がNone
に対応付けられます。
https://docs.python.org/ja/3/library/stdtypes.html#str.maketrans
今回は削除するだけなので、第3引数を指定します。
table = str.maketrans("", "", string.punctuation)
str.translate()
str.translate()で、文字列を処理します。
str.translate
(table)
与えられた変換テーブルに基づいて文字列を構成する各文字をマッピングし、マッピング後の文字列のコピーを返します
https://docs.python.org/ja/3/library/stdtypes.html#str.translate
str.maketrans() で作成したテーブルを str.translate()に渡すことで、文中のpunctuationをまとめて削除してくれます。
下の例では、”Dammit I’m mad.”という文章を、’dammitimmad’に変換しています。
ついでに、replace()でスペースを削除して、lowercase()小文字にしています。
>>> import string >>> s = "Dammit I'm mad." >>> table = str.maketrans("", "", string.punctuation) >>> s = s.translate(table) >>> s = s.replace(" ", "") >>> s 'DammitImmad' >>> s = s.lower() >>> s 'dammitimmad' >>>
正規表現を使うPunctuationの削除
正規表現を使うことで、文字数字以外を空文字に変換します。
\w
が [a-zA-Z0-9_]
に、\W
が [^a-zA-Z0-9_]
に相当します。
_
のみ数字文字に含まれるので、こちらは別に削除します。
>>> import re >>> s = "Dammit I'm mad." >>> s = re.sub(r'[\W]', '', s) >>> s = re.sub(r'\_', '', s) >>> s 'DammitImmad' >>> s = s.lower() >>> s 'dammitimmad'
上と同様の結果になりました。