spaCyのis_punctで句読点かどうか調べる【自然言語処理, Python】
- 作成日: 2021-03-29
- 更新日: 2023-12-24
- カテゴリ: 自然言語処理
spaCyのis_punctの使い方
自然言語処理ライブラリのspaCyのトークンにはis_punct
という属性があります。
この属性を参照すると、そのトークンが句読点かどうか判別することができます。
is_punct
のほかにもis_left_punct
やis_right_punct
がありますが、これらの使い方も合わせて解説します。
具体的には↓を見ていきます。
- punctとは?
- 句読点とは?
- 句読点の種類
- spacyのインポート
- spaCyへのGiNZAのロード
- is_punctでトークンが句読点かどうか判別する
- is_left_punctで'('かどうか判別する
- is_right_punctで')'かどうか判別する
- 早見表
punctとは?
is_punct
のpunct
とはpunctuation
の略です。
punctuation
は日本語に訳すと「句読点、区切り、句切り」などになります。
句読点とは?
句読点とは句点(。
)と読点(、
)の総称です。
狭い意味では半角文字だと.
や.
がこれに当たります。
広い意味では!
や?
, それから(
や)
などの括弧などもそうです。
句読点の種類
句読点には↓のような種類があります。
- 。(句点)
- 、(読点)
- .(ピリオド)
- ,(カンマ)
- ((左丸カッコ)
- )(右丸カッコ)
- [(左角カッコ)
- ](右角カッコ)
- {(左ブレース)
- }(右ブレース)
- !(ビックリマーク)
- !(ビックリマーク全角)
- ?(ハテナマーク)
- ?(ハテナマーク全角)
- :(コロン)
- ;(セミコロン)
- '(シングルクオート)
- "(ダブルクオート)
- -(ハイフン)
-
(シャープ)
- %(パーセント)
- &(アンド)
↑の記号はspaCyではすべて句読点です。
spacyのインポート
今回の解説に使うコードでは最初にspacy
をインポートしておきます。
こうするとspaCyのモジュールを使うことが出来るようになります。
import spacy
spaCyへのGiNZAのロード
また、冒頭でGiNZAもロードしておきます。
今回は日本語の解析にはGiNZAのモデルを使います。
↓のようにspacy.load()
にja_ginza
を渡してロードすると、返り値としてginza.Japanese
が返ってきます。
この返り値には慣例的にnlp
と命名します。
nlp = spacy.load('ja_ginza')
is_punctでトークンが句読点かどうか判別する
is_punct
はトークン(spacy.tokens.token.Token
)が句読点ならTrue
, 句読点じゃなければFalse
になるbool
値の属性です。
トークンに対してis_punct
でアクセスすると参照することができます。
import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('[ ] ( ) < > { } ! ? ! ? 。 、 . , : ; \' " - # % &')
for tok in doc:
print(tok, tok.is_punct)
↑のコードを実行すると↓のような結果になります。
[ True
] True
( True
) True
< False
> False
{ True
} True
! True
? True
! True
? True
。 True
、 True
. True
, True
: True
; True
' True
" True
- True
# True
% True
& True
↑を見ると<
と>
意外はis_punct
がTrue
になっているのがわかります。
<
と>
は句読点とはみなされないんですね。
is_left_punctで'('かどうか判別する
is_left_punct
属性はトークンが左カッコの類であればTrue
になり、そうでなければFalse
になるbool
値の属性です。
これを使うとトークンが左カッコの類かどうか確認することができます。
import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('[ ] ( ) < > { } ! ? ! ? 。 、 . , : ; \' " - # % &')
for tok in doc:
print(tok, tok.is_left_punct)
↑のコードを実行すると↓のような結果になります。
[ True
] False
( True
) False
< True
> False
{ True
} False
! False
? False
! False
? False
。 False
、 False
. False
, False
: False
; False
' True
" True
- False
# False
% False
& False
↑の結果を見ると[
や(
などはTrue
になっているのがわかります。
注意したいのは<
もTrue
になっている点です。<
はis_punct
ではFalse
になりますが、is_left_punct
ではTrue
になります。またクオーテーション系もTrue
になっています。
is_right_punctで')'かどうか判別する
is_right_punct
属性でトークンが右カッコの類かどうか判定できます。
import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('[ ] ( ) < > { } ! ? ! ? 。 、 . , : ; \' " - # % &')
for tok in doc:
print(tok, tok.is_right_punct)
↑のコードを実行すると↓のような結果になります。
[ False
] True
( False
) True
< False
> True
{ False
} True
! False
? False
! False
? False
。 False
、 False
. False
, False
: False
; False
' True
" True
- False
# False
% False
& False
早見表
is_punct
とis_left_punct
, それからis_right_punct
の対応は↓のようになります。
記号 | is_punct | is_left_punct | is_right_punct |
---|---|---|---|
[ | True | True | False |
] | True | False | True |
( | True | True | False |
) | True | False | True |
< | False | True | False |
> | False | False | True |
{ | True | True | False |
} | True | False | True |
! | True | False | False |
? | True | False | False |
! | True | False | False |
? | True | False | False |
。 | True | False | False |
、 | True | False | False |
. | True | False | False |
, | True | False | False |
: | True | False | False |
; | True | False | False |
' | True | True | True |
" | True | True | True |
- | True | False | False |
# | True | False | False |
% | True | False | False |
& | True | False | False |
おわりに
今回はspaCyのis_punct
について見てみました。
パースで句読点を扱いたい場合は使えそうな属性です。