読者です 読者をやめる 読者になる 読者になる

言語処理100本ノック

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

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

import re

sentences = []
with open("D:\\nlp100\\neko.txt.mecab",encoding="UTF-8") as fr:
    line = fr.readline()
    keitaiso = []
    while line:
        if "EOS" in line:
            if len(keitaiso)>0:
                sentences.append(keitaiso)
                keitaiso = []
        else:
            line = re.split(r'[\t,]',line)            
            keitaiso.append({"surface":line[0],"base":line[7],"pos":line[1],"pos1":line[2]})
        line =fr.readline()

print(sentences)

<結果(一部)>

[[{'base': '一', 'pos': '名詞', 'surface': '一', 'pos1': '数'}], [{'base': '\u3000', 'pos': '記号', 'surface': '\u3000', 'pos1': '空白'}], [{'base': '吾輩', 'pos': '名詞', 'surface': '吾輩', 'pos1': '代名詞'}, {'base': 'は', 'pos': '助詞', 'surface': 'は', 'pos1': '係助詞'}, {'base': '猫', 'pos': '名詞', 'surface': '猫', 'pos1': '一般'}, {'base': 'だ', 'pos': '助動詞', 'surface': 'で', 'pos1': '*'}, {'base': 'ある', 'pos': '助動詞', 'surface': 'ある', 'pos1': '*'}, {'base': '。', 'pos': '記号', 'surface': '。', 'pos1': '句点'}], [{'base': '名前', 'pos': '名詞', 'surface': '名前', 'pos1': '一般'}, {'base': 'は', 'pos': '助詞', 'surface': 'は', 'pos1': '係助詞'}, {'base': 'まだ', 'pos': '副詞', 'surface': 'まだ', 'pos1': '助詞類接続'}, {'base': '無い', 'pos': '形容詞', 'surface': '無い', 'pos1': '自立'},