私たちがよく遭遇する可能性があるすべての句読点があるリストまたはライブラリはありますか?
通常はstring.punctuation
を使用しますが、一部の句読文字は含まれていません。次に例を示します。
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
wimによる回答 は、関数を使用するようにコードを変更できる場合に最適です。
ただし、in
演算子を使用する必要がある場合(たとえば、ライブラリコードを呼び出す場合)、ダックタイピングを使用できます。
import unicodedata
class DuckType:
def __contains__(self,s):
return unicodedata.category(s).startswith("P")
punct=DuckType()
#print("'" in punct,'"' in punct,"a" in punct)
それは正規表現(regexp)のかなりの仕事のようです:
import re
text = re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE)
ここで、正規表現は、空白またはWord文字以外のすべてに一致します。フラグre.UNICODE
は、Unicode文字の完全なセットを照合するために使用されます。
他の回答が指摘しているように、これを行う方法は、Unicodeプロパティ/カテゴリを使用することです。 承認された回答 は、標準ライブラリunicodedata
モジュールを介してこの情報にアクセスしますが、これが必要なコンテキストによっては、通常の方法で同じプロパティ情報にアクセスする方が高速または便利な場合があります式。
ただし、標準ライブラリ re
module は拡張Unicodeサポートを提供しません。そのためには、PyPIで利用可能な regex
module が必要です(pip install regex
):
>>> import regex as re
>>> re.match("\p{Punctuation}", "'")
<regex.Match object; span=(0, 1), match="'">
>>> re.match("\p{Punctuation}", "’")
<regex.Match object; span=(0, 1), match='’'>
正規表現を使用して検索できるすべての異なる種類のUnicodeプロパティの概要は、 here で提供されています。 PyPIホームページに記載されているこれらの追加の正規表現機能とは別に、regex
はre
と同じAPIを意図的に提供しているため、re
のドキュメントを使用してそれらのどちらかを使用する方法を理解してください。