LoginSignup
0
0

More than 3 years have passed since last update.

言語処理100本ノック 第4章: 形態素解析 33. 「AのB」

Posted at

問題

2つの名詞が「の」で連結されている名詞句を抽出せよ.
https://nlp100.github.io/ja/ch04.html

下のデータでいうと、「彼の掌」を抽出しろという問題。

# inputデータ
[[{'surface': 'ただ', 'base': 'ただ', 'pos': '副詞', 'pos1': '*'},
  {'surface': '彼', 'base': '彼', 'pos': '名詞', 'pos1': '普通名詞'},
  {'surface': 'の', 'base': 'の', 'pos': '助詞', 'pos1': '接続助詞'},
  {'surface': '掌', 'base': '掌', 'pos': '名詞', 'pos1': '普通名詞'},
  {'surface': 'に', 'base': 'に', 'pos': '助詞', 'pos1': '格助詞'},
  {'surface': '載せ', 'base': '載せる', 'pos': '動詞', 'pos1': '*'},
  {'surface': 'られて', 'base': 'られる', 'pos': '接尾辞', 'pos1': '動詞性接尾辞'},
  {'surface': 'スー', 'base': 'スー', 'pos': '名詞', 'pos1': '普通名詞'},
  {'surface': 'と', 'base': 'と', 'pos': '助詞', 'pos1': '格助詞'},
  {'surface': '持ち', 'base': '持つ', 'pos': '動詞', 'pos1': '*'},
  {'surface': '上げ', 'base': '上げる', 'pos': '動詞', 'pos1': '*'},
  {'surface': 'られた', 'base': 'られる', 'pos': '接尾辞', 'pos1': '動詞性接尾辞'},
  {'surface': '時', 'base': '時', 'pos': '名詞', 'pos1': '副詞的名詞'},
  {'surface': '何だか', 'base': '何だか', 'pos': '副詞', 'pos1': '*'},
  {'surface': 'フワフワ', 'base': 'フワフワ', 'pos': '副詞', 'pos1': '*'},
  {'surface': 'した', 'base': 'する', 'pos': '動詞', 'pos1': '*'},
  {'surface': '感じ', 'base': '感じ', 'pos': '名詞', 'pos1': '普通名詞'},
  {'surface': 'が', 'base': 'が', 'pos': '助詞', 'pos1': '格助詞'},
  {'surface': 'あった', 'base': 'ある', 'pos': '動詞', 'pos1': '*'},
  {'surface': 'ばかりである', 'base': 'ばかりだ', 'pos': '助動詞', 'pos1': '*'},
  {'surface': '。', 'base': '。', 'pos': '特殊', 'pos1': '句点'}],
...

回答

1文ごと、1形態素ごとに「の」の前後に名詞があるかチェックする。
インデックスを0から始めると、「の」が先頭・終わりの場所にあると、
IndexError: list index out of range
とエラーになるので、インデックスの開始を1からにする必要がある。

surface = []
for sentense in result_list:
    for i in range(1, len(sentense)-1):
        if sentense[i-1]['pos'] == '名詞' and sentense[i]['surface'] == 'の' and sentense[i+1]['pos'] == '名詞':
            surface.append(sentense[i-1]['surface'] + sentense[i]['surface'] + sentense[i+1]['surface'])
surface

# 結果
['彼の掌',
 '掌の上',
 '書生の顔',
 'ものの見始',
 '顔の真中',
 '穴の中',
 '書生の掌',
...

参考にしたサイト

言語処理100本ノックに挑戦 第4章

0
0
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
0
0