これは自然言語処理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': 'か'},