nltk.download()
함수를 사용해서 필요한 기능을 다운로드 받는다.
nltk.download('averaged_perceptron_tagger')
nltk.download('punkt')
영문 형태소 분석기가 준비되었으면 The quick brown fox jumps over the lazy dog 문장을 대상으로 명사를 추출해본다. 형태소 분석이 끝난 결과를 딕셔너리로 만들어서 이를 토큰화 과정을 마친 단어의 형태소를 list comprehension으로 명사만 추출한다.
import nltk
from pprint import pprint
eng_sentence = ["The quick brown fox jumps over the lazy dog"]
def build_dictionary():
dictionary = {}
for sent in eng_sentence:
pos_tags = nltk.pos_tag(nltk.word_tokenize(sent))
for tag in pos_tags:
value = tag[0]
pos = tag[1]
dictionary[value] = pos
return dictionary
pos_dict = build_dictionary()
pprint(pos_dict)
{'The': 'DT',
'brown': 'NN',
'dog': 'NN',
'fox': 'NN',
'jumps': 'VBZ',
'lazy': 'JJ',
'over': 'IN',
'quick': 'JJ',
'the': 'DT'}
['brown', 'fox', 'dog']
한국어 형태소 분석기는 Kkma, Hannanum, Komoran, Mecab, Twitter 정도가 많이 알려져 있고, 각각 다른 특성이 있기 때문에 풀고자 하는 텍스트 데이터에 따라서 적절히 사용하면 좋다. 다만, MeCab의 경우 RmecabKo 설치 - 맥(Mac)을 참조하여 R 환경에서 설치하고, 파이썬 환경 특히 KoNLPy bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
을 추가하여 설치해야 하는데 GCC에 의존하여 맥에서 설치가 되지 않는 경우 다음을 참조하여 설치과정을 마무리한다.
MeCab_wrap.cxx:2982:10: fatal error: 'stdexcept' file not found
오류
맥 OSX 기본 컴파일러는 Apple LLVM 이라, 환경 변수에 GNU 를 설정하지 않고 export CC=/usr/local/Cellar/gcc/9.1.0/bin/gcc-9
명령어를 사용해서 MeCab 설치만 사용하고 자세한 설치 과정은 OSX - Mojave 에서 mecab-python3 설치하기 블로그를 참조한다.
노무현 대통령 전시작전 통제권 “부끄러운 줄 알아야지” 연설 중 일부를 발췌하여 명사를 뽑아내보자. 이를 위해서 Mecab()
객체를 생성하고 이를 통해 특정 품사만 추출, 특히 명사만 추출해본다.
from konlpy.tag import Kkma, Hannanum, Komoran, Mecab, Twitter
speech = '대한민국 군대들 지금까지 뭐 했노, 이기(야)! 나도 군대 갔다 왔고, 예비군 훈련[3]까지 다 받았는데, 심심하면 사람한테 세금 내라 하고, 불러다가 뺑뺑이 돌리고 훈련시키고 했는데, 거 위에 사람들은 뭐 했어! 작전통제권 자기들 나라 자기 군대 작전통제도 한 개 제대로 할 수 없는 군대를 맨들어 놔 놓고 “나 국방장관이요!” “나 참모총장이요!” 그렇게 별들 달고 끄드럭(거드럭)거리고 말았다는 얘깁니까? 그래서 작통권 회수하면 안 된다고 줄줄이 모여가 가지고 성명 내고. 자기들이 직무유기 아입니까? 부끄러운 줄 알아야지! 그렇게 수치스러운 일을들 하고…. 작통권 돌려받으면 우리 한국군들 잘해요. 경제도 잘하고, 문화도 잘하고, 영화도 잘하고, 한국 사람들이 외국 나가 보니깐 못 하는 게 없는데, 전화기도 잘 만들고, 차도 잘 만들고, 배도 잘 만들고 못 하는 게 없는데! 왜, 작전통제권만 왜 못 한다는 얘깁니까? 실제로요, 남북간에도 외교가 있고 한국과 중국 사이에도 외교가 있는데 — 북한의 유사시라는 건 뭐 있을 수도 없지만 전쟁도 유사시도 있을 수가 없지만 — 그러나 전쟁과 유사시를 항상 우리는 전제하고 준비하고 있는데 — 중국도 그렇게 준… 준비하지 않겠습니까? — 한국군이 작전통제권을 가지고 있을 때 북한과 우리가 대화하는 관계, 중국과 우리가 대화할 때, 외교상의 대화를 할 때, 동북아시아 안보 문제를 놓고 대화를 할 때, 그래도 한국이 말빨이 좀 있지 않겠습니까? 작전통제권도 없는 사람이, 민간시설에 폭격을 할 건지 안 할 건지 그것도 마음대로 결정 못 하고, 어느 시설에 폭격할 건지 그것도 지 맘대로 결정 못 하는 나라가 그 판에 가 가지고 중국한테 무슨 할 말이 있습니까…. 북한한테 무슨 할 말이 있어요? 이것은 외교상의 실리에 매우 중요한 문제 아니겠습니까?'
mecab = Mecab()
## 전체 품사 태깅
speech_pos = mecab.pos(speech)
pprint(speech_pos)
## 명사품사만 추출
[('대한민국', 'NNP'),
('군대', 'NNG'),
('들', 'XSN'),
('지금', 'NNG'),
('까지', 'JX'),
('뭐', 'IC'),
('했', 'VV+EP'),
('노', 'EF'),
(',', 'SC'),
('이기', 'NNG'),
('(', 'SSO'),
('야', 'NNG'),
(')', 'SSC'),
('!', 'SF'),
('나', 'NP'),
('도', 'JX'),
('군대', 'NNG'),
('갔', 'VV+EP'),
('다', 'EC'),
('왔', 'VX+EP'),
('고', 'EC'),
(',', 'SC'),
('예비군', 'NNG'),
('훈련', 'NNG'),
('[', 'SSO'),
('3', 'SN'),
(']', 'SSC'),
('까지', 'JX'),
('다', 'MAG'),
('받', 'VV'),
('았', 'EP'),
('는데', 'EC'),
(',', 'SC'),
('심심', 'XR'),
('하', 'XSA'),
('면', 'EC'),
('사람', 'NNG'),
('한테', 'JKB'),
('세금', 'NNG'),
('내라', 'NNP'),
('하고', 'JKB'),
(',', 'SC'),
('불러다가', 'VV+EC'),
('뺑뺑이', 'NNG'),
('돌리', 'VV'),
('고', 'EC'),
('훈련', 'NNG'),
('시키', 'XSV'),
('고', 'EC'),
('했', 'VX+EP'),
('는데', 'EC'),
(',', 'SC'),
('거', 'IC'),
('위', 'NNG'),
('에', 'JKB'),
('사람', 'NNG'),
('들', 'XSN'),
('은', 'JX'),
('뭐', 'IC'),
('했', 'VV+EP'),
('어', 'EF'),
('!', 'SF'),
('작전', 'NNG'),
('통제', 'NNG'),
('권', 'XSN'),
('자기', 'NP'),
('들', 'XSN'),
('나라', 'NNG'),
('자기', 'NP'),
('군대', 'NNG'),
('작전', 'NNG'),
('통제', 'NNG'),
('도', 'JX'),
('한', 'MM'),
('개', 'NNBC'),
('제대로', 'MAG'),
('할', 'VV+ETM'),
('수', 'NNB'),
('없', 'VA'),
('는', 'ETM'),
('군대', 'NNG'),
('를', 'JKO'),
('맨들', 'VV'),
('어', 'EC'),
('놔', 'VX+EC'),
('놓', 'VX'),
('고', 'EC'),
('“', 'SSO'),
('나', 'NP'),
('국방', 'NNG'),
('장관', 'NNG'),
('이', 'VCP'),
('요', 'EF'),
('!', 'SF'),
('”', 'SY'),
('“', 'SSO'),
('나', 'NP'),
('참모총장', 'NNP'),
('이요', 'JX'),
('!', 'SF'),
('”', 'SSC'),
('그렇', 'VA'),
('게', 'EC'),
('별', 'NNG'),
('들', 'XSN'),
('달', 'VV'),
('고', 'EC'),
('끄드럭', 'XR'),
('(', 'SSO'),
('거드럭', 'XR'),
(')', 'SSC'),
('거리', 'XSV'),
('고', 'EC'),
('말', 'VX'),
('았', 'EP'),
('다는', 'ETM'),
('얘깁니까', 'NNG+VCP+EF'),
('?', 'SF'),
('그래서', 'MAJ'),
('작통', 'NNG'),
('권', 'XSN'),
('회수', 'NNG'),
('하', 'XSV'),
('면', 'EC'),
('안', 'MAG'),
('된다고', 'VV+EC'),
('줄줄이', 'MAG'),
('모여', 'VV+EC'),
('가', 'JX'),
('가지', 'VX'),
('고', 'EC'),
('성명', 'NNG'),
('내', 'VV'),
('고', 'EC'),
('.', 'SF'),
('자기', 'NP'),
('들', 'XSN'),
('이', 'JKS'),
('직무', 'NNG'),
('유기', 'NNG'),
('아입니까', 'VCN+EF'),
('?', 'SF'),
('부끄러운', 'VA+ETM'),
('줄', 'NNB'),
('알', 'VV'),
('아야지', 'EF'),
('!', 'SF'),
('그렇게', 'MAG'),
('수치', 'NNG'),
('스러운', 'XSA+ETM'),
('일', 'NNG'),
('을', 'JKO'),
('들', 'VV'),
('하고', 'EC'),
('…', 'SE'),
('.', 'SF'),
('작통', 'NNG'),
('권', 'XSN'),
('돌려받', 'VV'),
('으면', 'EC'),
('우리', 'NP'),
('한', 'MM'),
('국군', 'NNG'),
('들', 'XSN'),
('잘', 'MAG'),
('해요', 'VV+EF'),
('.', 'SF'),
('경제', 'NNG'),
('도', 'JX'),
('잘', 'MAG'),
('하', 'VV'),
('고', 'EC'),
(',', 'SC'),
('문화', 'NNG'),
('도', 'JX'),
('잘', 'MAG'),
('하', 'VV'),
('고', 'EC'),
(',', 'SC'),
('영화', 'NNG'),
('도', 'JX'),
('잘', 'MAG'),
('하', 'VV'),
('고', 'EC'),
(',', 'SC'),
('한국', 'NNP'),
('사람', 'NNG'),
('들', 'XSN'),
('이', 'JKS'),
('외국', 'NNG'),
('나가', 'VV+EC'),
('보', 'VX'),
('니깐', 'EC'),
('못', 'MAG'),
('하', 'VV'),
('는', 'ETM'),
('게', 'NNB+JKS'),
('없', 'VA'),
('는데', 'EC'),
(',', 'SC'),
('전화기', 'NNG'),
('도', 'JX'),
('잘', 'MAG'),
('만들', 'VV'),
('고', 'EC'),
(',', 'SC'),
('차', 'NNG'),
('도', 'JX'),
('잘', 'MAG'),
('만들', 'VV'),
('고', 'EC'),
(',', 'SC'),
('배', 'NNG'),
('도', 'JX'),
('잘', 'MAG'),
('만들', 'VV'),
('고', 'EC'),
('못', 'MAG'),
('하', 'VV'),
('는', 'ETM'),
('게', 'NNB+JKS'),
('없', 'VA'),
('는데', 'EF'),
('!', 'SF'),
('왜', 'MAG'),
(',', 'SC'),
('작전', 'NNG'),
('통제', 'NNG'),
('권', 'XSN'),
('만', 'JX'),
('왜', 'MAG'),
('못', 'MAG'),
('한다는', 'VV+ETM'),
('얘깁니까', 'NNG+VCP+EF'),
('?', 'SF'),
('실제로', 'MAG'),
('요', 'JX'),
(',', 'SC'),
('남북', 'NNP'),
('간', 'NNB'),
('에', 'JKB'),
('도', 'JX'),
('외교', 'NNG'),
('가', 'JKS'),
('있', 'VA'),
('고', 'EC'),
('한국', 'NNP'),
('과', 'JC'),
('중국', 'NNP'),
('사이', 'NNG'),
('에', 'JKB'),
('도', 'JX'),
('외교', 'NNG'),
('가', 'JKS'),
('있', 'VA'),
('는데', 'EC'),
('—', 'SY'),
('북한', 'NNP'),
('의', 'JKG'),
('유사시', 'NNG'),
('라는', 'VCP+ETM'),
('건', 'NNB+JX'),
('뭐', 'NP'),
('있', 'VV'),
('을', 'ETM'),
('수', 'NNB'),
('도', 'JX'),
('없', 'VA'),
('지만', 'EC'),
('전쟁', 'NNG'),
('도', 'JX'),
('유사시', 'NNG'),
('도', 'JX'),
('있', 'VA'),
('을', 'ETM'),
('수', 'NNB'),
('가', 'JKS'),
('없', 'VA'),
('지만', 'EC'),
('—', 'SY'),
('그러나', 'MAJ'),
('전쟁', 'NNG'),
('과', 'JC'),
('유사시', 'NNG'),
('를', 'JKO'),
('항상', 'MAG'),
('우리', 'NP'),
('는', 'JX'),
('전제', 'NNG'),
('하', 'XSV'),
('고', 'EC'),
('준비', 'NNG'),
('하', 'XSV'),
('고', 'EC'),
('있', 'VX'),
('는데', 'EC'),
('—', 'SY'),
('중국', 'NNP'),
('도', 'JX'),
('그렇', 'VA'),
('게', 'EC'),
('준', 'VX+ETM'),
('…', 'SE'),
('준비', 'NNG'),
('하', 'XSV'),
('지', 'EC'),
('않', 'VX'),
('겠', 'EP'),
('습니까', 'EF'),
('?', 'SF'),
('—', 'SY'),
('한국군', 'NNP'),
('이', 'JKS'),
('작전', 'NNG'),
('통제', 'NNG'),
('권', 'XSN'),
('을', 'JKO'),
('가지', 'VV'),
('고', 'EC'),
('있', 'VX'),
('을', 'ETM'),
('때', 'NNG'),
('북한', 'NNP'),
('과', 'JC'),
('우리', 'NP'),
('가', 'JKS'),
('대화', 'NNG'),
('하', 'XSV'),
('는', 'ETM'),
('관계', 'NNG'),
(',', 'SC'),
('중국', 'NNP'),
('과', 'JC'),
('우리', 'NP'),
('가', 'JKS'),
('대화', 'NNG'),
('할', 'XSV+ETM'),
('때', 'NNG'),
(',', 'SC'),
('외교', 'NNG'),
('상', 'XSN'),
('의', 'JKG'),
('대화', 'NNG'),
('를', 'JKO'),
('할', 'VV+ETM'),
('때', 'NNG'),
(',', 'SC'),
('동북아시아', 'NNP'),
('안보', 'NNG'),
('문제', 'NNG'),
('를', 'JKO'),
('놓', 'VV'),
('고', 'EC'),
('대화', 'NNG'),
('를', 'JKO'),
('할', 'VV+ETM'),
('때', 'NNG'),
(',', 'SC'),
('그래도', 'MAJ'),
('한국', 'NNP'),
('이', 'JKS'),
('말', 'NNG'),
('빨', 'VV+ETM'),
('이', 'MM'),
('좀', 'MAG'),
('있', 'VA'),
('지', 'EC'),
('않', 'VX'),
('겠', 'EP'),
('습니까', 'EF'),
('?', 'SF'),
('작전', 'NNG'),
('통제', 'NNG'),
('권', 'XSN'),
('도', 'JX'),
('없', 'VA'),
('는', 'ETM'),
('사람', 'NNG'),
('이', 'JKS'),
(',', 'SC'),
('민간', 'NNG'),
('시설', 'NNG'),
('에', 'JKB'),
('폭격', 'NNG'),
('을', 'JKO'),
('할', 'VV+ETM'),
('건지', 'NNB+VCP+EC'),
('안', 'MAG'),
('할', 'VV+ETM'),
('건지', 'NNB+VCP+EC'),
('그것', 'NP'),
('도', 'JX'),
('마음대로', 'MAG'),
('결정', 'NNG'),
('못', 'MAG'),
('하', 'VV'),
('고', 'EC'),
(',', 'SC'),
('어느', 'MM'),
('시설', 'NNG'),
('에', 'JKB'),
('폭격', 'NNG'),
('할', 'XSV+ETM'),
('건지', 'NNB+VCP+EC'),
('그것', 'NP'),
('도', 'JX'),
('지', 'VX'),
('맘대로', 'MAG'),
('결정', 'NNG'),
('못', 'MAG'),
('하', 'VV'),
('는', 'ETM'),
('나라', 'NNG'),
('가', 'JKS'),
('그', 'MM'),
('판', 'NNG'),
('에', 'JKB'),
('가', 'VV+EC'),
('가지', 'VX'),
('고', 'EC'),
('중국', 'NNP'),
('한테', 'JKB'),
('무슨', 'MM'),
('할', 'VV+ETM'),
('말', 'NNG'),
('이', 'JKS'),
('있', 'VV'),
('습니까', 'EC'),
('…', 'SE'),
('.', 'SF'),
('북한', 'NNP'),
('한테', 'JKB'),
('무슨', 'MM'),
('할', 'VV+ETM'),
('말', 'NNG'),
('이', 'JKS'),
('있', 'VA'),
('어요', 'EF'),
('?', 'SF'),
('이것', 'NP'),
('은', 'JX'),
('외교', 'NNG'),
('상', 'XSN'),
('의', 'JKG'),
('실리', 'NNG'),
('에', 'JKB'),
('매우', 'MAG'),
('중요', 'NNG'),
('한', 'XSA+ETM'),
('문제', 'NNG'),
('아니', 'VCN'),
('겠', 'EP'),
('습니까', 'EF'),
('?', 'SF')]
['대한민국', '군대', '지금', '이기', '야', '군대', '예비군', '훈련', '사람', '세금', '내라', '뺑뺑이', '훈련', '위', '사람', '작전', '통제', '나라', '군대', '작전', '통제', '군대', '국방', '장관', '참모총장', '별', '작통', '회수', '성명', '직무', '유기', '수치', '일', '작통', '국군', '경제', '문화', '영화', '한국', '사람', '외국', '전화기', '차', '배', '작전', '통제', '남북', '외교', '한국', '중국', '사이', '외교', '북한', '유사시', '전쟁', '유사시', '전쟁', '유사시', '전제', '준비', '중국', '준비', '한국군', '작전', '통제', '때', '북한', '대화', '관계', '중국', '대화', '때', '외교', '대화', '때', '동북아시아', '안보', '문제', '대화', '때', '한국', '말', '작전', '통제', '사람', '민간', '시설', '폭격', '결정', '시설', '폭격', '결정', '나라', '판', '중국', '말', '북한', '말', '외교', '실리', '중요', '문제']
['대한민국', '군대', '지금', '이기', '야', '나', '군대', '예비군', '훈련', '사람', '세금', '내라', '뺑뺑이', '훈련', '위', '사람', '작전', '통제', '자기', '나라', '자기', '군대', '작전', '통제', '개', '수', '군대', '나', '국방', '장관', '나', '참모총장', '별', '얘깁니까', '작통', '회수', '성명', '자기', '직무', '유기', '줄', '수치', '일', '작통', '우리', '국군', '경제', '문화', '영화', '한국', '사람', '외국', '게', '전화기', '차', '배', '게', '작전', '통제', '얘깁니까', '남북', '간', '외교', '한국', '중국', '사이', '외교', '북한', '유사시', '건', '뭐', '수', '전쟁', '유사시', '수', '전쟁', '유사시', '우리', '전제', '준비', '중국', '준비', '한국군', '작전', '통제', '때', '북한', '우리', '대화', '관계', '중국', '우리', '대화', '때', '외교', '대화', '때', '동북아시아', '안보', '문제', '대화', '때', '한국', '말', '작전', '통제', '사람', '민간', '시설', '폭격', '건지', '건지', '그것', '결정', '시설', '폭격', '건지', '그것', '결정', '나라', '판', '중국', '말', '북한', '말', '이것', '외교', '실리', '중요', '문제']