ko-nlp/Korpora

모두의 말뭉치: 어휘 의미 분석 말뭉치 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}]}