GiNZA(5) - 文境界解析

文境界解析は、文章を文ごとに分解する処理です。

文の境界は「。」があるのでこれを検出すれば問題ないと思うかもしれませんが、「!」「?」で区切ることもあります。

また、「彼は『本当ですか。』とつぶやいた。」というように会話文が含まれていることもあり、文境界解析は意外と難しい処理になります。

文境界解析

文境界解析を行うソースコードは次のようになります。

[Google Colaboratory]

1
2
3
4
5
6
7
mport spacy
nlp = spacy.load('ja_ginza')
doc = nlp('新橋でランチをご一緒しましょう。次の火曜日はどうですか。')

# 文境界解析
for span in doc.sents:
print(span)

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

[実行結果]

1
2
新橋でランチをご一緒しましょう。
次の火曜日はどうですか。

文ごとに分解することができました。


さらにspanをforでループすることにより、文を分割したトークンを取得することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('新橋でランチをご一緒しましょう。次の火曜日はどうですか。')

# 文境界解析+トークン化
for span in doc.sents:
for token in span:
print(token)

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

[実行結果]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
新橋

ランチ


一緒

ましょう



火曜日

どう
です



次回は、文節分割を行います。