형태소 분석에서 원하는 품사를 추출하는 방법을 알아보자. 이는 출력 결과에서 lemma 와 xpos 를 짝지은 쌍이 된다.
import stanza
nlp = stanza.Pipeline('ko')
2020-04-01 15:21:53 INFO: Loading these models for language: ko (Korean): ======================= | Processor | Package | ----------------------- | tokenize | kaist | | pos | kaist | | lemma | kaist | | depparse | kaist | ======================= 2020-04-01 15:21:53 INFO: Use device: gpu 2020-04-01 15:21:53 INFO: Loading: tokenize 2020-04-01 15:21:56 INFO: Loading: pos 2020-04-01 15:21:57 INFO: Loading: lemma 2020-04-01 15:21:58 INFO: Loading: depparse 2020-04-01 15:21:59 INFO: Done loading processors!
먼저 텍스트를 처리해보자.
text = '오늘은 자연어 처리를 공부하기 좋은 날이다.'
doc = nlp(text)
'오늘은'의 분석 결과를 보자.
word = doc.sentences[0].words[0]
word
{ "id": "1", "text": "오늘은", "lemma": "오늘+은", "upos": "NOUN", "xpos": "ncn+jxt", "head": 5, "deprel": "dislocated", "misc": "start_char=0|end_char=3" }
'오늘은'은 '오늘'과 '은'이 합쳐진 형태이다.
word.lemma
'오늘+은'
이들의 품사는 다음과 같다. 명사는 n
으로 시작하고, 조사는 j
로 시작한다.
word.xpos
'ncn+jxt'
형태소들은 +
기호로 구분되어 있으므로 .split
를 분리한다.
word.lemma.split('+')
['오늘', '은']
word.xpos.split('+')
['ncn', 'jxt']
zip
함수로 lemma와 xpos의 각 원소를 짝짓을 수 있다.
list(zip(word.lemma.split('+'), word.xpos.split('+')))
[('오늘', 'ncn'), ('은', 'jxt')]
doc
의 첫 문장에서 모든 형태소와 그 품사를 짝지어 출력해본다.
for word in doc.sentences[0].words:
lemma = word.lemma.split('+')
xpos = word.xpos.split('+')
for token, pos in zip(lemma, xpos):
print(token, pos)
오늘 ncn 은 jxt 자연어 ncn 처리 ncpa 를 jco 공부 ncpa 하 xsv 기 etn 좋 paa ㄴ etm 날 ncn 이 jp 다 ef