自然言語処理100本ノック2020から逃げるな「30. 形態素解析結果の読み込み」

これは自然言語処理100本ノック2020に挑んだ、とある人間の記録
他の問題はこちら → 自然言語処理100本ノック2020から逃げるな まとめ

30. 形態素解析結果の読み込み

形態素解析結果(neko.txt.mecab)を読み込むプログラムを実装せよ.ただし,各形態素は表層形(surface),基本形(base),品詞(pos),品詞細分類1(pos1)をキーとするマッピング型に格納し,1文を形態素マッピング型)のリストとして表現せよ.第4章の残りの問題では,ここで作ったプログラムを活用せよ.

Pythonコード

from pprint import pprint

fname = "neko.txt.mecab"

def get_morpheme():
    with open(fname) as f:
        result_list = []
        sentence = []
        for line in f:
            if line == "EOS\n" and 0 < len(sentence):
                result_list.append(sentence[:])
                sentence.clear()
            line_sp_tab = line.split('\t')
            if len(line_sp_tab) < 2:
                continue
            line_sp_comma = line_sp_tab[1].split(',')
            morpheme = {
                'surface':line_sp_tab[0],
                'base':line_sp_comma[6],
                'pos':line_sp_comma[0],
                'pos1':line_sp_comma[1]
            }
            sentence.append(morpheme)
    return result_list

if __name__ == "__main__":
    for morpheme in get_morpheme():
        pprint(morpheme)

実行結果

[{'base': '一', 'pos': '名詞', 'pos1': '数', 'surface': '一'}]
[{'base': '\u3000', 'pos': '記号', 'pos1': '空白', 'surface': '\u3000'},
 {'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': '\u3000', 'pos': '記号', 'pos1': '空白', 'surface': '\u3000'},
 {'base': 'どこ', 'pos': '名詞', 'pos1': '代名詞', 'surface': 'どこ'},
 {'base': 'で', 'pos': '助詞', 'pos1': '格助詞', 'surface': 'で'},
 {'base': '生れる', 'pos': '動詞', 'pos1': '自立', 'surface': '生れ'},
 {'base': 'た', 'pos': '助動詞', 'pos1': '*', 'surface': 'た'},
 {'base': 'か', 'pos': '助詞', 'pos1': '副助詞/並立助詞/終助詞', 'surface': 'か'},