KoNLPy는 한국어 형태소 분석기(POS Tagger)들을 파이썬에서 쓸 수 있도록 만든 라이브러리예요.
⸻
📌 주요 특징
• 여러 형태소 분석기 지원
• Hannanum (KAIST 한나눔 형태소 분석기)
• Kkma (서울대 꼬꼬마 형태소 분석기)
• Komoran (SHINEware의 Komoran)
• Okt (트위터 형태소 분석기, 현재는 Open Korean Text로 개명)
• Mecab (별도 설치 필요, 빠르고 정확함)
• 형태소 분석 (morphological analysis): 문장을 형태소 단위로 분리
• 품사 태깅 (POS tagging): 단어별 품사 정보를 태깅
• 명사 추출: 텍스트에서 명사만 추출
⸻
📌 설치 방법
pip install konlpy
(macOS나 Windows에서 Java 설치가 필요할 수 있음)
⸻
📌 간단 사용 예시
from konlpy.tag import Okt
okt = Okt()
text = "자연어 처리는 재미있습니다."
print(okt.morphs(text)) # 형태소 단위 분리
print(okt.pos(text)) # 품사 태깅
print(okt.nouns(text)) # 명사 추출
출력 예시
['자연어', '처리', '는', '재미', '있습니다', '.'][('자연어', 'Noun'), ('처리', 'Noun'), ('는', 'Josa'), ('재미', 'Noun'), ('있습니다', 'Adjective'), ('.', 'Punctuation')]
['자연어', '처리', '재미']
⸻
👉 정리하면, KoNLPy는 한국어 자연어처리 실습/연구를 위한 파이썬용 라이브러리로, 여러 형태소 분석기를 파이썬에서 쉽게 다룰 수 있게 해줍니다.
📊 KoNLPy 분석기 비교
분석기 개발 기관/팀 장점 단점 대표 사용 예시
Hannanum KAIST - 오래된 연구 기반- 문법 구조 분석 가능 - 상대적으로 느림- 최신 문법 반영 부족 연구용, 문장 구조 분석
Kkma 서울대 - 세밀한 품사 태깅- 문장 분리 기능 지원 - 속도가 느림 품사 태깅 정밀도 요구되는 경우
Komoran SHINEware - 속도와 정확도의 균형- 사전 커스터마이즈 용이 - Java 의존성 있음 실제 서비스 환경, 챗봇 등
Okt (구 Twitter) Open Korean Text 프로젝트 - 설치/사용이 간편- 신조어, SNS 텍스트 강점 - 정밀한 분석은 부족 SNS 데이터, 감성 분석
Mecab (별도 설치) 일본 원 개발, 한국어판 포크 - 매우 빠르고 정확- 대용량 텍스트 처리 적합 - 별도 설치 필요 (konlpy 기본 제공 X) 검색엔진, 추천 시스템, 실서비스
📌 추천 가이드
• 연구/학습: Kkma, Hannanum
• SNS/일상 텍스트: Okt
• 서비스 적용(속도+정확도): Komoran 또는 Mecab
📌 예시 코드: KoNLPy 분석기 비교
from konlpy.tag import Hannanum, Kkma, Komoran, Okt
hannanum = Hannanum()
kkma = Kkma()
komoran = Komoran()
okt = Okt()
text = "자연어 처리는 정말 재미있고 유용한 기술입니다."
print("=== Hannanum ===")
print(hannanum.morphs(text))
print(hannanum.pos(text))
print(hannanum.nouns(text))
print()
print("=== Kkma ===")
print(kkma.morphs(text))
print(kkma.pos(text))
print(kkma.nouns(text))
print()
print("=== Komoran ===")
print(komoran.morphs(text))
print(komoran.pos(text))
print(komoran.nouns(text))
print()
print("=== Okt ===")
print(okt.morphs(text))
print(okt.pos(text))
print(okt.nouns(text))
⸻
📌 예상 출력 (분석기별 차이)
🔹 Hannanum
['자연어', '처리', '는', '정말', '재미있', '고', '유용', '한', '기술', '입니다', '.'][('자연어', 'N'), ('처리', 'N'), ('는', 'J'), ('정말', 'M'), ('재미있', 'P'), ('고', 'E'), ('유용', 'N'), ('한', 'M'), ('기술', 'N'), ('입니다', 'E'), ('.', 'S')]
['자연어', '처리', '유용', '기술']
🔹 Kkma
['자연어', '처리', '는', '정말', '재미', '있', '고', '유용', '하', 'ㄴ', '기술', '이', 'ㅂ니다', '.'][('자연어', 'NNG'), ('처리', 'NNG'), ('는', 'JX'), ('정말', 'MAG'), ('재미', 'NNG'), ('있', 'VA'), ('고', 'EC'), ('유용', 'XR'), ('하', 'XSA'), ('ㄴ', 'ETD'), ('기술', 'NNG'), ('이', 'VCP'), ('ㅂ니다', 'EFN'), ('.', 'SF')]
['자연어', '처리', '재미', '기술']
🔹 Komoran
['자연어', '처리', '는', '정말', '재미있', '고', '유용', '한', '기술', '입니다', '.'][('자연어', 'NNP'), ('처리', 'NNG'), ('는', 'JX'), ('정말', 'MAG'), ('재미있', 'VA'), ('고', 'EC'), ('유용', 'XR'), ('한', 'XSA+ETM'), ('기술', 'NNG'), ('입니다', 'VCP+EF'), ('.', 'SF')]
['자연어', '처리', '기술']
🔹 Okt
['자연어', '처리', '는', '정말', '재미있', '고', '유용', '한', '기술', '입니다', '.'][('자연어', 'Noun'), ('처리', 'Noun'), ('는', 'Josa'), ('정말', 'Adverb'), ('재미있', 'Adjective'), ('고', 'Conjunction'), ('유용', 'Adjective'), ('한', 'Determiner'), ('기술', 'Noun'), ('입니다', 'Adjective'), ('.', 'Punctuation')]
['자연어', '처리', '기술']
⸻
📌 이렇게 같은 문장을 넣어도 분석기마다 형태소 분리 방식, 품사 태깅 체계, 명사 추출 결과가 조금씩 달라요.
👉 연구 목적이면 여러 분석기 비교 후 목적에 맞는 것을 선택하는 게 좋아요.
좋습니다 👍 앞서 보여드린 결과를 표 형태로 정리해드릴게요.
⸻
📊 KoNLPy 분석기 비교 (예문: “자연어 처리는 정말 재미있고 유용한 기술입니다.”)
분석기 형태소 분석 결과 (morphs) 품사 태깅 (pos) 예시 명사 추출 (nouns)
Hannanum ['자연어', '처리', '는', '정말', '재미있', '고', '유용', '한', '기술', '입니다', '.'][('자연어','N'), ('처리','N'), ('정말','M'), ('재미있','P'), ('기술','N')] ['자연어','처리','유용','기술']
Kkma ['자연어','처리','는','정말','재미','있','고','유용','하','ㄴ','기술','이','ㅂ니다','.'][('자연어','NNG'), ('재미','NNG'), ('있','VA'), ('유용','XR+XSA'), ('기술','NNG')] ['자연어','처리','재미','기술']
Komoran ['자연어','처리','는','정말','재미있','고','유용','한','기술','입니다','.'][('자연어','NNP'), ('재미있','VA'), ('유용','XR+XSA'), ('기술','NNG')] ['자연어','처리','기술']
Okt ['자연어','처리','는','정말','재미있','고','유용','한','기술','입니다','.'][('자연어','Noun'), ('재미있','Adjective'), ('유용','Adjective'), ('기술','Noun')] ['자연어','처리','기술']
⸻
📌 요약
• Hannanum: 명사 추출 시 유용도 포함 → 단어 성격을 다르게 인식.
• Kkma: 재미있을 재미 + 있으로 세분화 → 가장 세밀.
• Komoran: 정확성과 속도 모두 괜찮음.
• Okt: SNS 친화적, 직관적 분석 결과.
⸻