LoginSignup
2
2

More than 5 years have passed since last update.

KNPを利用して述語項構造を抽出

Last updated at Posted at 2019-04-07

概要

京大黒橋河原研究室による係り受け解析エンジンKNP。非常に情報量の多い結果が出力されるのが特徴だが、今日はそれを使って述語項構造を抽出することを試みた。

pyknp を使用して述語項構造を抽出してみる

import re
from pyknp import KNP


def analyze_pas(sentence):
    knp = KNP(option = '-tab -anaphora', jumanpp=False)
    result = knp.parse(sentence)
    for b in  result.bnst_list():
        match = re.search(r"<項構造:(.+)>", b.spec())
        if match:
            pas =  match.group(1)
            items = pas.split(":")
            print(b.bnst_id, items)

Jupyter Notebook(Github)

結果

sentence = '今日太郎は昨日花子が読んでいた本を次郎に渡した'
analyze_pas(sentence)

4 ['読む/よむ', '動2', 'ヲ/N/本/5;時間/C/昨日/2;ガ/C/花子/3']
5 ['本/ほん', '名1', 'ノ/O/太郎/1']
7 ['渡す/わたす', '動2', '時間/C/今日/0;ガ/N/太郎/1;ヲ/C/本/5;ニ/C/次郎/6']
sentence = "昨日私が彼を駅まで迎えに行ったとき、小雨が降っていた"
analyze_pas(sentence)

3 ['駅/えき', '名1']
4 ['迎える/むかえる', '動3', 'ガ/O/私/1;ヲ/O/彼/2']
5 ['行く/いく', '動9', '外の関係/N/とき/6;ガ/C/私/1;ヲ/C/彼/2;マデ/C/駅/3']
8 ['降る/ふる', '動1', '時間/C/昨日/0;ガ/C/小雨/7']
sentence = "非常に情報量の多い結果が出力されるのが特徴だが、今日はそれを使って述語項構造を抽出することを試みた"
analyze_pas(sentence)

0 ['非常だ/ひじょうだ', '形1']
1 ['情報/じょうほう+量/りょう', '名1']
2 ['多い/おおい', '形11', '外の関係/N/結果/4;修飾/C/非常に/0;ガ/N/情報量/2']
5 ['特徴/とくちょう', '判2', 'ガ/C/の/6']
8 ['使う/つかう', '動3', 'ヲ/C/それ/9']
10 ['抽出/ちゅうしゅつ', '動2', '外の関係/N/こと/15;ヲ/C/述語項構造/13']
12 ['試みる/こころみる', '動2', '時間/N/今日/8;ヲ/C/こと/15']

感想

短い文章に関しては、綺麗に述語項構造が抽出できた。ただ、長い文章になると、単純な項構造の切り出しだけだと、文節が分かれることで意味が取りづらい(例:3番目の例の文節10と文節12)こともあるようだ。引き続きいろいろ調べてみようと思う。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2