GiNZA(8) - 単語係り受け解析

単語係り受け解析は、単語の係り受け関係を木構造で表現します。

各単語は木の頂点に対応し、ただ1つの親と複数の子を持ちます。

単語の係り受け解析

単語係り受け解析を行うソースコードは次の通りです。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
import spacy
from spacy import displacy
nlp = spacy.load('ja_ginza')
doc = nlp('新橋で打ち合わせをしましょう。')

# 単語の係り受け解析
for token in doc:
print(token.text+' ← '+token.head.text+', '+token.dep_)

# グラフ表示
displacy.render(doc, style='dep', jupyter=True)

実行結果は以下の通りです。

[実行結果]

1
2
3
4
5
6
7
新橋 ← し, obl
で ← 新橋, case
打ち合わせ ← し, obj
を ← 打ち合わせ, case
し ← し, ROOT
ましょう ← し, aux
。 ← し, punct

各単語の係り受け関係をグラフで確認することができました。


11行目のグラフ表示処理で、options={‘compact’:True, ‘distance’: 90}を指定すると、グラフをシンプルに表示することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
import spacy
from spacy import displacy
nlp = spacy.load('ja_ginza')
doc = nlp('新橋で打ち合わせをしましょう。')

# 単語の係り受け解析
for token in doc:
print(token.text+' ← '+token.head.text+', '+token.dep_)

# シンプルなグラフ表示
displacy.render(doc, style='dep', jupyter=True, options={'compact':True, 'distance': 90})

実行結果は以下の通りです。

[実行結果]

次回は、固有表現抽出を行います。