모두의 말뭉치: 어휘 의미 분석 말뭉치 loader
lovit opened this issue · 1 comments
lovit commented
어휘 의미 분석 말뭉치는 한 문장 (form
) 에 대하여 어절 (단어 아님) word
, 형태소 (morpheme
), 의미태그 (WSD
) 가 포함되어 있습니다.
하나의 데이터 (example) 은 다음의 정보로 구성되어야 합니다.
- form
- [(morpheme, morpheme tag, semantic tag, eojeol id), ... ]
(snapshot)
import json
with open('path/to/NIKL_LS(v1.0)/NXLS1902008050.json') as f:
json_data = json.load(f)
json_data.keys() # dict_keys(['id', 'metadata', 'document'])
sentence = json_data['document'][0]['sentence']
sentence[1]
{'id': 'NWRW1800000022.417.2.1',
'form': '2012년 세계자연보전총회(World Conservation Congress) 유치에 성공한 제주도가 세계환경수도 조성에 잰걸음을 내딛었다.',
'word': [{'id': 1, 'form': '2012년', 'begin': 0, 'end': 5},
{'id': 2, 'form': '세계자연보전총회(World', 'begin': 6, 'end': 20},
{'id': 3, 'form': 'Conservation', 'begin': 21, 'end': 33},
{'id': 4, 'form': 'Congress)', 'begin': 34, 'end': 43},
{'id': 5, 'form': '유치에', 'begin': 44, 'end': 47},
{'id': 6, 'form': '성공한', 'begin': 48, 'end': 51},
{'id': 7, 'form': '제주도가', 'begin': 52, 'end': 56},
{'id': 8, 'form': '세계환경수도', 'begin': 57, 'end': 63},
{'id': 9, 'form': '조성에', 'begin': 64, 'end': 67},
{'id': 10, 'form': '잰걸음을', 'begin': 68, 'end': 72},
{'id': 11, 'form': '내딛었다.', 'begin': 73, 'end': 78}],
'morpheme': [{'id': 1,
'form': '2012',
'label': 'SN',
'word_id': 1,
'position': 1},
{'id': 2, 'form': '년', 'label': 'NNB', 'word_id': 1, 'position': 2},
{'id': 3, 'form': '세계', 'label': 'NNG', 'word_id': 2, 'position': 1},
{'id': 4, 'form': '자연', 'label': 'NNG', 'word_id': 2, 'position': 2},
{'id': 5, 'form': '보전', 'label': 'NNG', 'word_id': 2, 'position': 3},
{'id': 6, 'form': '총회', 'label': 'NNG', 'word_id': 2, 'position': 4},
{'id': 7, 'form': '(', 'label': 'SS', 'word_id': 2, 'position': 5},
{'id': 8, 'form': 'World', 'label': 'SL', 'word_id': 2, 'position': 6},
{'id': 9, 'form': 'Conservation', 'label': 'SL', 'word_id': 3, 'position': 1},
{'id': 10, 'form': 'Congress', 'label': 'SL', 'word_id': 4, 'position': 1},
{'id': 11, 'form': ')', 'label': 'SS', 'word_id': 4, 'position': 2},
{'id': 12, 'form': '유치', 'label': 'NNG', 'word_id': 5, 'position': 1},
{'id': 13, 'form': '에', 'label': 'JKB', 'word_id': 5, 'position': 2},
{'id': 14, 'form': '성공', 'label': 'NNG', 'word_id': 6, 'position': 1},
{'id': 15, 'form': '하', 'label': 'XSV', 'word_id': 6, 'position': 2},
{'id': 16, 'form': 'ㄴ', 'label': 'ETM', 'word_id': 6, 'position': 3},
{'id': 17, 'form': '제주도', 'label': 'NNP', 'word_id': 7, 'position': 1},
{'id': 18, 'form': '가', 'label': 'JKS', 'word_id': 7, 'position': 2},
{'id': 19, 'form': '세계', 'label': 'NNG', 'word_id': 8, 'position': 1},
{'id': 20, 'form': '환경', 'label': 'NNG', 'word_id': 8, 'position': 2},
{'id': 21, 'form': '수도', 'label': 'NNG', 'word_id': 8, 'position': 3},
{'id': 22, 'form': '조성', 'label': 'NNG', 'word_id': 9, 'position': 1},
{'id': 23, 'form': '에', 'label': 'JKB', 'word_id': 9, 'position': 2},
{'id': 24, 'form': '잰걸음', 'label': 'NNG', 'word_id': 10, 'position': 1},
{'id': 25, 'form': '을', 'label': 'JKO', 'word_id': 10, 'position': 2},
{'id': 26, 'form': '내딛', 'label': 'VV', 'word_id': 11, 'position': 1},
{'id': 27, 'form': '었', 'label': 'EP', 'word_id': 11, 'position': 2},
{'id': 28, 'form': '다', 'label': 'EF', 'word_id': 11, 'position': 3},
{'id': 29, 'form': '.', 'label': 'SF', 'word_id': 11, 'position': 4}],
'WSD': [{'word': '년',
'sense_id': 2,
'pos': 'NNB',
'begin': 4,
'end': 5,
'word_id': 1},
{'word': '세계',
'sense_id': 2,
'pos': 'NNG',
'begin': 6,
'end': 8,
'word_id': 2},
{'word': '자연',
'sense_id': 2,
'pos': 'NNG',
'begin': 8,
'end': 10,
'word_id': 2},
{'word': '보전',
'sense_id': 4,
'pos': 'NNG',
'begin': 10,
'end': 12,
'word_id': 2},
{'word': '총회',
'sense_id': 2,
'pos': 'NNG',
'begin': 12,
'end': 14,
'word_id': 2},
{'word': '유치',
'sense_id': 10,
'pos': 'NNG',
'begin': 44,
'end': 46,
'word_id': 5},
{'word': '성공',
'sense_id': 1,
'pos': 'NNG',
'begin': 48,
'end': 50,
'word_id': 6},
{'word': '제주도',
'sense_id': 1,
'pos': 'NNP',
'begin': 52,
'end': 55,
'word_id': 7},
{'word': '세계',
'sense_id': 2,
'pos': 'NNG',
'begin': 57,
'end': 59,
'word_id': 8},
{'word': '환경',
'sense_id': 1,
'pos': 'NNG',
'begin': 59,
'end': 61,
'word_id': 8},
{'word': '수도',
'sense_id': 12,
'pos': 'NNG',
'begin': 61,
'end': 63,
'word_id': 8},
{'word': '조성',
'sense_id': 5,
'pos': 'NNG',
'begin': 64,
'end': 66,
'word_id': 9},
{'word': '잰걸음',
'sense_id': 1,
'pos': 'NNG',
'begin': 68,
'end': 71,
'word_id': 10}]}
lovit commented
WSD
의 의미 태그의 정합성에 대하여 확인이 필요합니다. 아래의 예시에서 김태환
이란 단어의 sense_id
는 777 입니다. 한 단어에 대하여 의미가 하나일 경우 sense_id
가 1, 한 단어에 대하여 의미가 두 개일 경우 sense_id
의 최대값이 2가 되는 것으로 추정 됩니다. 그렇다면 전체 말뭉치에서 김태환
이라는 단어는 적어도 777 번 등장했다는 의미일텐데, 상식적이지는 않기에 확인이 필요합니다.
import json
with open('path/to/NIKL_LS(v1.0)/NXLS1902008050.json') as f:
json_data = json.load(f)
json_data.keys() # dict_keys(['id', 'metadata', 'document'])
sentence = json_data['document'][0]['sentence']
sentence[0]
...
'WSD': [{'word': '제주',
'sense_id': 8,
'pos': 'NNP',
'begin': 1,
'end': 3,
'word_id': 1},
{'word': '서울',
'sense_id': 2,
'pos': 'NNP',
'begin': 4,
'end': 6,
'word_id': 1},
{'word': '세계',
'sense_id': 2,
'pos': 'NNG',
'begin': 9,
'end': 11,
'word_id': 2},
{'word': '환경',
'sense_id': 1,
'pos': 'NNG',
'begin': 11,
'end': 13,
'word_id': 2},
{'word': '수도',
'sense_id': 12,
'pos': 'NNG',
'begin': 13,
'end': 15,
'word_id': 2},
{'word': '조성',
'sense_id': 5,
'pos': 'NNG',
'begin': 16,
'end': 18,
'word_id': 3},
{'word': '개년',
'sense_id': 3,
'pos': 'NNB',
'begin': 23,
'end': 25,
'word_id': 4},
{'word': '실천',
'sense_id': 1,
'pos': 'NNG',
'begin': 26,
'end': 28,
'word_id': 5},
{'word': '계획',
'sense_id': 1,
'pos': 'NNG',
'begin': 28,
'end': 30,
'word_id': 5},
{'word': '김태환',
'sense_id': 777,
'pos': 'NNP',
'begin': 37,
'end': 40,
'word_id': 7},
{'word': '지사',
'sense_id': 10,
'pos': 'NNG',
'begin': 41,
'end': 43,
'word_id': 8}]}