spaCyのis_punctで句読点かどうか調べる【自然言語処理, Python】
目次
- spaCyのis_punctの使い方
- punctとは?
- 句読点とは?
- 句読点の種類
- spacyのインポート
- spaCyへのGiNZAのロード
- is_punctでトークンが句読点かどうか判別する
- is_left_punctで'('かどうか判別する
- is_right_punctで')'かどうか判別する'かどうか判別する)
- 早見表
- おわりに
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
について見てみました。
パースで句読点を扱いたい場合は使えそうな属性です。