SlideShare a Scribd company logo
1 of 33
Download to read offline
자바, 미안하다! 
PyCon Korea 2014 
Korean NLP with Python 
Lucy Park (박은정) 
KoNLPy on GitHub 
1 / 33
개요 NLTK 덕에 파이썬으로 자연어처리를 하는 것이 편리해졌다. 
단, 한국어만 분석하려하지 않는다면. 
파이썬으로 한국어를 분석할 수는 없을까? 
국문, 영문, 중문 등 다양한 문자가 섞여 있는 문서는 어떻게 분 
석할 수 있을까? 
이 발표에서는 자연어처리의 기초적인 개념을 다룬 후, NLTK 등 
의 자연어처리 라이브러리와 한국어 분석을 위해 개발중인 
KoNLPy를 소개한다. 또, 파이썬으로 한국어를 분석할 때 유용 
한 몇 가지 트릭을 공유한다. 
KoNLPy docs: http://konlpy.readthedocs.org 
Slides URL: http://www.lucypark.kr/slides/2014-pyconkr 
Slides code: https://gist.github.com/e9t/546faa368424e04e25c7 
2 / 33
박은정 
(a.k.a. 
lucypark, 
echojuliett, e9t) 
개발하는 데이터 분석가. 
서울대학교 데이터마이닝 센터 박사과정 
"대한민국 정치의 모든 것" 만드는 팀포퐁 멤버 
Just another yak shaver... 
11:49 <@sanxiyn> 또다시 yak shaving의 신비한 세계 
11:51 <@sanxiyn> yak shaving이 뭔지 다 아시죠? 
11:51 <디토군> 방금 찾아보고 왔음 
11:51 <@mana> (조용히 설명을 기대중) 
11:51 <@sanxiyn> 나무를 베려고 하는데 
11:52 <@sanxiyn> 도끼질을 하다가 
11:52 <@sanxiyn> 도끼가 더 잘 들면 나무를 쉽게 벨텐데 해서 
11:52 <@sanxiyn> 도끼 날을 세우다가 
11:52 <@sanxiyn> 도끼 가는 돌이 더 좋으면 도끼 날을 더 빨리 세울텐데 해서 
11:52 <@sanxiyn> 좋은 숫돌이 있는 곳을 수소문해 보니 
11:52 <@mana> … 
11:52 <&홍민희> 그거 전형적인 제 행동이네요 
11:52 <@sanxiyn> 저 멀이 어디에 세계 최고의 숫돌이 난다고 
11:52 <@sanxiyn> 거기까지 야크를 타고 가려다가 
11:52 <@mana> 항상하던 짓이라서 타이핑을 할 수 없었습니다 
11:52 <@sanxiyn> 야크 털을 깎아서… 
11:52 <@sanxiyn> etc. 
3 / 33
"caricature" 
4 / 33
"사람의 생김새를 결정짓는 것은 
골격과 피부의 미묘한 변화에서 비롯되는 차이점이고, 
그 차이점을 없애 버린다면 모든 사람의 생김새는 
똑같을 것입니다." 
-- 만화가 김충원 
5 / 33
"데이터를 결정짓는 것은 
행과 열의 미묘한 변화에서 비롯되는 차이점이고, 
그 차이점을 없애 버린다면 모든 데이터는 
똑같을 것입니다." 
6 / 33
수많은 공통점을 두고도 
차이를 만드는 요인. 
데이터 분석의 관점에서는: 
"Features" 
7 / 33
문서 간 차이를 만드는 "Features"는 뭘까? 
8 / 33
9 / 33
10 / 33
형태소 
언어의 최소 의미 단위. 
* 영어는 tokenizing, stemming으로 충분한 경우도 있지만 결국 마찬가지. ex: "unbreakable"=="un-"+"break"+"-able" 
11 / 33
형태소분석 with C/C++ & Java 
corpus linguistics == 언어 분석을 computational하게 해보자! 
1995년, KTS를 시작으로 국내외에서 여러 "오픈소스" 형태소 분석기가 개발됨 
형태소 분석기를 만든다 == 알고리즘 구현 + 방대한 코퍼스 기반으로 사전 구축 
한마디로, 정말 대단한 작업 
* 형태소 분석기 링크들은 여기에: http://konlpy.readthedocs.org/en/latest/references 
12 / 33
이러한 역작들을, 
더 많은 사람들이 쉽게 이용하게 할 수 있을까? 
13 / 33
그러한 관점에서 
누구나 쉽게 NLP를 할 수 있게 해준 패키지 두 개: 
KoNLP, for R 
NLTK, for Python 
14 / 33
KoNLP, for R https://github.com/haven-jeon/KoNLP 
한나눔 형태소 분석기 R interface 
세종계획한국어 코퍼스, 사전 등을 마련한 10년 계획 정부사업의 확장적 사용 
그 외 NLP를 편리하게 하는 각종 함수 구현 
많은 down-to-earth 예제를 담은 documentation 
"Python으로도 이런게 있으면 좋겠다!" 이름에도 내포돼있듯 KoNLPy의 가장 큰 inspiration! 
15 / 33
NLTK, for Python http://nltk.org 
Porter, snowball, Lancaster 등 다양한 stemming 알고리즘 포함 
그 외 chunking, NER, classification 알고리즘 포함 
50개가 넘는 (주로 영어지만 다양한 언어의) 코퍼스 포함 
역시 풍부한 문서 
(Natural) language free, platform free, and free 
"한국어만 지원되면 정말 좋겠다!" 
* NLTK는 Language-free한 속성 때문에 파이썬 한국어 NLP에도 유용하게 이용할 수 있습니다. (예시: Collocation 찾기) 
16 / 33
파이썬으로 형태소 분석, 
한국어 NLP 할 수 있으면 정말 좋겠네 
1. 형태소 분석기 뿐 아니라, 더 많은 자연어 처리 기능 & 코퍼스를 포괄하면서 
2. 여러 형태소 분석기 중에서는 목적/취향에 맞는 것을 쉽게 선택할 수 있게 
3. 누구나 참여할 수 있는, 여과없는 오픈소스를 
4. 상세한 예제를 담은 문서와 함께 
5. 가장 Pythonic 한 형태로 
(...로 만드는 것이 "목표".) 
17 / 33
KoNLPy, for Python http://konlpy.rtfd.org 
"Standing on the shoulders of giants" 
2014년 7월, 한나눔 형태소 분석기만 담아 첫 릴리즈 
2014년 8월, 꼬꼬마, MeCab-ko 형태소 분석기도 포함하여 v0.3.0 릴리즈 
국회 의안 등 재사용/재배포가 가능한 공문서 위주로 toying data 추가 
그 외 각종 튜토리얼, konlpy.utils.pprint 등 편리한 함수 추가 
GitHub을 통해 누구나 논의와 개발에 참여할 수 있습니다! 
18 / 33
한 번 써볼까요? 
19 / 33
Installation 
$ pip install JPype1 # Aㅏ... dependencies... 
$ pip install konlpy 
20 / 33
>>> from konlpy.tag import Kkma 
>>> from konlpy.utils import pprint # 파이썬 2에서 편리한 출력을 위함 
>>> kkma = Kkma() 
>>> pprint(kkma.sentences(u'네, 안녕하세요. 반갑습니다.')) 
[네, 안녕하세요.., 
반갑습니다.] 
>>> pprint(kkma.nouns(u'질문이나 건의사항은 깃헙 이슈 트래커에 남겨주세요.')) 
[질문, 
건의, 
건의사항, 
사항, 
깃헙, 
이슈, 
트래커] 
>>> pprint(kkma.pos(u'오류보고는 실행환경, 에러메세지와함께 설명을 최대한상세히!^^') 
[(오류, NNG), 
(보고, NNG), 
(는, JX), 
(실행, NNG), 
(환경, NNG), 
(,, SP), 
(에러, NNG), 
(메세지, NNG), 
(와, JKM), 
(함께, MAG), 
(설명, NNG), 
(을, JKO), 
(최대한, NNG), 
(상세히, MAG), 
(!, SF), 
(^^, EMO)] 
21 / 33
>>> from konlpy.tag import * 
>>> from konlpy.utils import pprint 
>>> engines = [Kkma(), Hannanum(), Mecab()] 
>>> s = u"갤럭시는 화면이 큰데, 좋은데?" # 'ㄴ데', '은데'가 다르다는 것에 주목! 
>>> for e in engines: 
... print e 
... pprint(e.pos(s)) 
<konlpy.tag._kkma.Kkma instance at 0x2d292d8> 
[(갤럭시, UN), 
(는, JX), 
(화면, NNG), 
(이, JKS), 
(크, VA), 
(ㄴ데, ECE), 
(,, SP), 
(좋, VA), 
(은데, ECD), 
(?, SF)] 
<konlpy.tag._hannanum.Hannanum instance at 0x2d299e0> 
[(갤럭시, N), 
(는, J), 
(화면, N), 
(이, J), 
(크, P), 
(ㄴ데, E), 
(,, S), 
(좋, P), 
(은, E), 
(데, N), 
(?, S)] 
<konlpy.tag._mecab.Mecab instance at 0x2d29950> 
[(갤럭시, NNP), 
(는, JX), 
(화면, NNG), 
(이, JKS), 
(큰데, VA+EC), 
22 / 33
태그셋 비교: Korean POS tags comparison chart 
23 / 33
형태소 분석 모듈 간 성능 비교 
형태소 분석기는 속도, 메모리 사용, 정확도 등으로 성능 평가 
One-size-fits-all 이라기보다는 서로 장단점이 있는 경우가 많음 
알고리즘 뿐 아니라 사전의 영향도 매우**2 큼 
자신의 목적/취향에 맞는 분석기+사전 조합을 사용 
* Warning! 
(1) 형태소 분석기 간 직접적인 비교가 아니라, KoNLPy 내부 모듈 간 비교입니다. 
(2) POS tagging은 형태소 분석과 구분됩니다. 자세한 설명은 구글신께 양보드립니다 :) 
24 / 33
좀 더 재밌는걸 해봅시다! 
25 / 33
예제: 워드클라우드 그리기 
목적: 파이썬만으로 웹문서에서 중요한 명사를 뽑아 워드클라우드로 그리기! 
* 코드는 지면상 여기에서: http://konlpy.readthedocs.org/en/latest/examples/wordcloud/ (재밌는 예제들도 더 있어요!) 
26 / 33
이걸 응용해서 만든 것이: 
http://pokr.kr/person/1958194 
27 / 33
Future works for KoNLPy 
1. 사전 interface 통일 
2. konlpy.download(): 코퍼스, 사전 등 data file을 소스코드에서 분리 
3. GCJ 등을 활용해서 JVM을 따로 구동하지 않는 방법 고려 
4. Python3 support 
5. 한국어 documentation? 
28 / 33
시간이 좀 남았나요? 
29 / 33
몇 가지 트릭 
한글 파일 읽기: "Decode early, encode late" 
>>> with open('somefile.txt', 'r') as f: 
... doc = f.read().decode('utf-8') 
>>> import codecs 
>>> codecs.open('somefile.txt', encoding='utf-8') 
sublee님의 Hangulize 
>>> from hangulize import hangulize 
>>> print hangulize('Guido van Rossum', 'nld') 
히도 판로쉼 
30 / 33
몇 가지 트릭 
문자의 정체 확인하기 
>>> from unicodedata import name 
>>> print '%s, %s, %s' % (name(u"ㆍ"), name(u"․"), name(u"・")) 
HANGUL LETTER ARAEA, ONE DOT LEADER, HALFWIDTH KATAKANA MIDDLE DOT 
>>> "・".decode("unicode-escape") 
u'xefxbdxa5' 
>>> ord(u"・"), repr(u"・") 
(65381, "u'uff65'") 
특수문자를 제외하고 어절을 얻고 싶은 경우 
>>> import regex 
>>> regex.findall(ur'p{Hangul}+', u'다람쥐, 헌 쳇바퀴에 타고파.') 
[u'ub2e4ub78cuc950', u'ud5cc', u'uccc7ubc14ud034uc5d0', u'ud0c0uace0ud30c'] 
31 / 33
몇 가지 트릭 
한글 romanize하기 
>>> from unidecode import unidecode 
>>> unidecode(u'파이콘') 
'paikon' 
한자, 한글, 영문가 섞여 있는 경우 
Multilingual NLP에서 제안하는 다양한 접근법이 있습니다. 
간단한 꼼수 한 가지는: "한자 전처리, 영문 후처리" 
한자는 transliterate하고 (ex: '丁新闻' -> 정신문) 
한국어 처리를 한 후에 (ex: POS tagging) 
영문으로 분류된 tag에 한해 따로 stemming 등을 거침 
32 / 33
감사합니다 :D 
http://lucypark.kr 
@echojuliett 
33 / 33

More Related Content

What's hot

스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)Yongho Ha
 
LLM 모델 기반 서비스 실전 가이드
LLM 모델 기반 서비스 실전 가이드LLM 모델 기반 서비스 실전 가이드
LLM 모델 기반 서비스 실전 가이드Tae Young Lee
 
'Growth Hacking (그로스 해킹)’ 적용 사례
'Growth Hacking (그로스 해킹)’ 적용 사례'Growth Hacking (그로스 해킹)’ 적용 사례
'Growth Hacking (그로스 해킹)’ 적용 사례RocketPunch Inc.
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]Yurim Jin
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101DaeMyung Kang
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Aree Oh
 
여기컨_스타트업 기획자의 월화수목금_이수지
여기컨_스타트업 기획자의 월화수목금_이수지여기컨_스타트업 기획자의 월화수목금_이수지
여기컨_스타트업 기획자의 월화수목금_이수지TechFeministgroup
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유Hyojun Jeon
 
나의 이직 이야기
나의 이직 이야기나의 이직 이야기
나의 이직 이야기종립 이
 
FirebaseとSPAでOGPに動的対応
FirebaseとSPAでOGPに動的対応FirebaseとSPAでOGPに動的対応
FirebaseとSPAでOGPに動的対応Seiya Koga
 
[222]딥러닝을 활용한 이미지 검색 포토요약과 타임라인 최종 20161024
[222]딥러닝을 활용한 이미지 검색 포토요약과 타임라인 최종 20161024[222]딥러닝을 활용한 이미지 검색 포토요약과 타임라인 최종 20161024
[222]딥러닝을 활용한 이미지 검색 포토요약과 타임라인 최종 20161024NAVER D2
 
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들Yu Yongwoo
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)Suhyun Park
 
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?Yongho Ha
 
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.Yongho Ha
 
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기Joeun Park
 
서비스 기획자를 위한 데이터분석 시작하기
서비스 기획자를 위한 데이터분석 시작하기서비스 기획자를 위한 데이터분석 시작하기
서비스 기획자를 위한 데이터분석 시작하기승화 양
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법Jeongsang Baek
 
Python と型アノテーション
Python と型アノテーションPython と型アノテーション
Python と型アノテーションK Yamaguchi
 

What's hot (20)

스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
 
LLM 모델 기반 서비스 실전 가이드
LLM 모델 기반 서비스 실전 가이드LLM 모델 기반 서비스 실전 가이드
LLM 모델 기반 서비스 실전 가이드
 
'Growth Hacking (그로스 해킹)’ 적용 사례
'Growth Hacking (그로스 해킹)’ 적용 사례'Growth Hacking (그로스 해킹)’ 적용 사례
'Growth Hacking (그로스 해킹)’ 적용 사례
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정
 
여기컨_스타트업 기획자의 월화수목금_이수지
여기컨_스타트업 기획자의 월화수목금_이수지여기컨_스타트업 기획자의 월화수목금_이수지
여기컨_스타트업 기획자의 월화수목금_이수지
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
 
나의 이직 이야기
나의 이직 이야기나의 이직 이야기
나의 이직 이야기
 
FirebaseとSPAでOGPに動的対応
FirebaseとSPAでOGPに動的対応FirebaseとSPAでOGPに動的対応
FirebaseとSPAでOGPに動的対応
 
[222]딥러닝을 활용한 이미지 검색 포토요약과 타임라인 최종 20161024
[222]딥러닝을 활용한 이미지 검색 포토요약과 타임라인 최종 20161024[222]딥러닝을 활용한 이미지 검색 포토요약과 타임라인 최종 20161024
[222]딥러닝을 활용한 이미지 검색 포토요약과 타임라인 최종 20161024
 
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
 
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
 
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
 
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
[PyCon KR 2018] 땀내를 줄이는 Data와 Feature 다루기
 
서비스 기획자를 위한 데이터분석 시작하기
서비스 기획자를 위한 데이터분석 시작하기서비스 기획자를 위한 데이터분석 시작하기
서비스 기획자를 위한 데이터분석 시작하기
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
Python と型アノテーション
Python と型アノテーションPython と型アノテーション
Python と型アノテーション
 

Similar to 자바, 미안하다! 파이썬 한국어 NLP

한글 언어 자원과 R: KoNLP 개선과 활용
한글 언어 자원과 R: KoNLP 개선과 활용한글 언어 자원과 R: KoNLP 개선과 활용
한글 언어 자원과 R: KoNLP 개선과 활용r-kor
 
클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)Sang-Kyu Park
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기복연 이
 
EveryBody Tensorflow module1 GIST Jan 2018 Korean
EveryBody Tensorflow module1 GIST Jan 2018 KoreanEveryBody Tensorflow module1 GIST Jan 2018 Korean
EveryBody Tensorflow module1 GIST Jan 2018 KoreanJaewook. Kang
 
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기PgDay.Seoul
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기복연 이
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)정명훈 Jerry Jeong
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임codenavy
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터Eunjeong (Lucy) Park
 
[Tf2017] day1 jwkang_pub
[Tf2017] day1 jwkang_pub[Tf2017] day1 jwkang_pub
[Tf2017] day1 jwkang_pubJaewook. Kang
 
Open Source Engineering V2
Open Source Engineering V2Open Source Engineering V2
Open Source Engineering V2YoungSu Son
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5KoChungWook
 
Python(basic)
Python(basic)Python(basic)
Python(basic)POSTECH
 
[Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기
[Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기 [Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기
[Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기 DaeHyun Sung
 

Similar to 자바, 미안하다! 파이썬 한국어 NLP (20)

한글 언어 자원과 R: KoNLP 개선과 활용
한글 언어 자원과 R: KoNLP 개선과 활용한글 언어 자원과 R: KoNLP 개선과 활용
한글 언어 자원과 R: KoNLP 개선과 활용
 
클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)
 
자연어1 | 1차강의
자연어1 | 1차강의자연어1 | 1차강의
자연어1 | 1차강의
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
 
EveryBody Tensorflow module1 GIST Jan 2018 Korean
EveryBody Tensorflow module1 GIST Jan 2018 KoreanEveryBody Tensorflow module1 GIST Jan 2018 Korean
EveryBody Tensorflow module1 GIST Jan 2018 Korean
 
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
 
​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기​『함수형 반응형 프로그래밍』 맛보기
​『함수형 반응형 프로그래밍』 맛보기
 
파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud
 
파이썬을 활용한 자연어 분석 - 2차
파이썬을 활용한 자연어 분석 - 2차파이썬을 활용한 자연어 분석 - 2차
파이썬을 활용한 자연어 분석 - 2차
 
Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)Python study 1강 (오픈소스컨설팅 내부 강의)
Python study 1강 (오픈소스컨설팅 내부 강의)
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터파이썬과 커뮤니티와 한국어 오픈데이터
파이썬과 커뮤니티와 한국어 오픈데이터
 
[Tf2017] day1 jwkang_pub
[Tf2017] day1 jwkang_pub[Tf2017] day1 jwkang_pub
[Tf2017] day1 jwkang_pub
 
파이썬을 활용한 자연어분석 기초
파이썬을 활용한 자연어분석 기초파이썬을 활용한 자연어분석 기초
파이썬을 활용한 자연어분석 기초
 
Open Source Engineering V2
Open Source Engineering V2Open Source Engineering V2
Open Source Engineering V2
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
 
Python(basic)
Python(basic)Python(basic)
Python(basic)
 
[Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기
[Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기 [Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기
[Emocon 2017 S/S] 20170414 유니코드(Unicode)로 오픈소스에 기여하기
 
파이썬 소개
파이썬 소개 파이썬 소개
파이썬 소개
 

자바, 미안하다! 파이썬 한국어 NLP

  • 1. 자바, 미안하다! PyCon Korea 2014 Korean NLP with Python Lucy Park (박은정) KoNLPy on GitHub 1 / 33
  • 2. 개요 NLTK 덕에 파이썬으로 자연어처리를 하는 것이 편리해졌다. 단, 한국어만 분석하려하지 않는다면. 파이썬으로 한국어를 분석할 수는 없을까? 국문, 영문, 중문 등 다양한 문자가 섞여 있는 문서는 어떻게 분 석할 수 있을까? 이 발표에서는 자연어처리의 기초적인 개념을 다룬 후, NLTK 등 의 자연어처리 라이브러리와 한국어 분석을 위해 개발중인 KoNLPy를 소개한다. 또, 파이썬으로 한국어를 분석할 때 유용 한 몇 가지 트릭을 공유한다. KoNLPy docs: http://konlpy.readthedocs.org Slides URL: http://www.lucypark.kr/slides/2014-pyconkr Slides code: https://gist.github.com/e9t/546faa368424e04e25c7 2 / 33
  • 3. 박은정 (a.k.a. lucypark, echojuliett, e9t) 개발하는 데이터 분석가. 서울대학교 데이터마이닝 센터 박사과정 "대한민국 정치의 모든 것" 만드는 팀포퐁 멤버 Just another yak shaver... 11:49 <@sanxiyn> 또다시 yak shaving의 신비한 세계 11:51 <@sanxiyn> yak shaving이 뭔지 다 아시죠? 11:51 <디토군> 방금 찾아보고 왔음 11:51 <@mana> (조용히 설명을 기대중) 11:51 <@sanxiyn> 나무를 베려고 하는데 11:52 <@sanxiyn> 도끼질을 하다가 11:52 <@sanxiyn> 도끼가 더 잘 들면 나무를 쉽게 벨텐데 해서 11:52 <@sanxiyn> 도끼 날을 세우다가 11:52 <@sanxiyn> 도끼 가는 돌이 더 좋으면 도끼 날을 더 빨리 세울텐데 해서 11:52 <@sanxiyn> 좋은 숫돌이 있는 곳을 수소문해 보니 11:52 <@mana> … 11:52 <&홍민희> 그거 전형적인 제 행동이네요 11:52 <@sanxiyn> 저 멀이 어디에 세계 최고의 숫돌이 난다고 11:52 <@sanxiyn> 거기까지 야크를 타고 가려다가 11:52 <@mana> 항상하던 짓이라서 타이핑을 할 수 없었습니다 11:52 <@sanxiyn> 야크 털을 깎아서… 11:52 <@sanxiyn> etc. 3 / 33
  • 5. "사람의 생김새를 결정짓는 것은 골격과 피부의 미묘한 변화에서 비롯되는 차이점이고, 그 차이점을 없애 버린다면 모든 사람의 생김새는 똑같을 것입니다." -- 만화가 김충원 5 / 33
  • 6. "데이터를 결정짓는 것은 행과 열의 미묘한 변화에서 비롯되는 차이점이고, 그 차이점을 없애 버린다면 모든 데이터는 똑같을 것입니다." 6 / 33
  • 7. 수많은 공통점을 두고도 차이를 만드는 요인. 데이터 분석의 관점에서는: "Features" 7 / 33
  • 8. 문서 간 차이를 만드는 "Features"는 뭘까? 8 / 33
  • 11. 형태소 언어의 최소 의미 단위. * 영어는 tokenizing, stemming으로 충분한 경우도 있지만 결국 마찬가지. ex: "unbreakable"=="un-"+"break"+"-able" 11 / 33
  • 12. 형태소분석 with C/C++ & Java corpus linguistics == 언어 분석을 computational하게 해보자! 1995년, KTS를 시작으로 국내외에서 여러 "오픈소스" 형태소 분석기가 개발됨 형태소 분석기를 만든다 == 알고리즘 구현 + 방대한 코퍼스 기반으로 사전 구축 한마디로, 정말 대단한 작업 * 형태소 분석기 링크들은 여기에: http://konlpy.readthedocs.org/en/latest/references 12 / 33
  • 13. 이러한 역작들을, 더 많은 사람들이 쉽게 이용하게 할 수 있을까? 13 / 33
  • 14. 그러한 관점에서 누구나 쉽게 NLP를 할 수 있게 해준 패키지 두 개: KoNLP, for R NLTK, for Python 14 / 33
  • 15. KoNLP, for R https://github.com/haven-jeon/KoNLP 한나눔 형태소 분석기 R interface 세종계획한국어 코퍼스, 사전 등을 마련한 10년 계획 정부사업의 확장적 사용 그 외 NLP를 편리하게 하는 각종 함수 구현 많은 down-to-earth 예제를 담은 documentation "Python으로도 이런게 있으면 좋겠다!" 이름에도 내포돼있듯 KoNLPy의 가장 큰 inspiration! 15 / 33
  • 16. NLTK, for Python http://nltk.org Porter, snowball, Lancaster 등 다양한 stemming 알고리즘 포함 그 외 chunking, NER, classification 알고리즘 포함 50개가 넘는 (주로 영어지만 다양한 언어의) 코퍼스 포함 역시 풍부한 문서 (Natural) language free, platform free, and free "한국어만 지원되면 정말 좋겠다!" * NLTK는 Language-free한 속성 때문에 파이썬 한국어 NLP에도 유용하게 이용할 수 있습니다. (예시: Collocation 찾기) 16 / 33
  • 17. 파이썬으로 형태소 분석, 한국어 NLP 할 수 있으면 정말 좋겠네 1. 형태소 분석기 뿐 아니라, 더 많은 자연어 처리 기능 & 코퍼스를 포괄하면서 2. 여러 형태소 분석기 중에서는 목적/취향에 맞는 것을 쉽게 선택할 수 있게 3. 누구나 참여할 수 있는, 여과없는 오픈소스를 4. 상세한 예제를 담은 문서와 함께 5. 가장 Pythonic 한 형태로 (...로 만드는 것이 "목표".) 17 / 33
  • 18. KoNLPy, for Python http://konlpy.rtfd.org "Standing on the shoulders of giants" 2014년 7월, 한나눔 형태소 분석기만 담아 첫 릴리즈 2014년 8월, 꼬꼬마, MeCab-ko 형태소 분석기도 포함하여 v0.3.0 릴리즈 국회 의안 등 재사용/재배포가 가능한 공문서 위주로 toying data 추가 그 외 각종 튜토리얼, konlpy.utils.pprint 등 편리한 함수 추가 GitHub을 통해 누구나 논의와 개발에 참여할 수 있습니다! 18 / 33
  • 20. Installation $ pip install JPype1 # Aㅏ... dependencies... $ pip install konlpy 20 / 33
  • 21. >>> from konlpy.tag import Kkma >>> from konlpy.utils import pprint # 파이썬 2에서 편리한 출력을 위함 >>> kkma = Kkma() >>> pprint(kkma.sentences(u'네, 안녕하세요. 반갑습니다.')) [네, 안녕하세요.., 반갑습니다.] >>> pprint(kkma.nouns(u'질문이나 건의사항은 깃헙 이슈 트래커에 남겨주세요.')) [질문, 건의, 건의사항, 사항, 깃헙, 이슈, 트래커] >>> pprint(kkma.pos(u'오류보고는 실행환경, 에러메세지와함께 설명을 최대한상세히!^^') [(오류, NNG), (보고, NNG), (는, JX), (실행, NNG), (환경, NNG), (,, SP), (에러, NNG), (메세지, NNG), (와, JKM), (함께, MAG), (설명, NNG), (을, JKO), (최대한, NNG), (상세히, MAG), (!, SF), (^^, EMO)] 21 / 33
  • 22. >>> from konlpy.tag import * >>> from konlpy.utils import pprint >>> engines = [Kkma(), Hannanum(), Mecab()] >>> s = u"갤럭시는 화면이 큰데, 좋은데?" # 'ㄴ데', '은데'가 다르다는 것에 주목! >>> for e in engines: ... print e ... pprint(e.pos(s)) <konlpy.tag._kkma.Kkma instance at 0x2d292d8> [(갤럭시, UN), (는, JX), (화면, NNG), (이, JKS), (크, VA), (ㄴ데, ECE), (,, SP), (좋, VA), (은데, ECD), (?, SF)] <konlpy.tag._hannanum.Hannanum instance at 0x2d299e0> [(갤럭시, N), (는, J), (화면, N), (이, J), (크, P), (ㄴ데, E), (,, S), (좋, P), (은, E), (데, N), (?, S)] <konlpy.tag._mecab.Mecab instance at 0x2d29950> [(갤럭시, NNP), (는, JX), (화면, NNG), (이, JKS), (큰데, VA+EC), 22 / 33
  • 23. 태그셋 비교: Korean POS tags comparison chart 23 / 33
  • 24. 형태소 분석 모듈 간 성능 비교 형태소 분석기는 속도, 메모리 사용, 정확도 등으로 성능 평가 One-size-fits-all 이라기보다는 서로 장단점이 있는 경우가 많음 알고리즘 뿐 아니라 사전의 영향도 매우**2 큼 자신의 목적/취향에 맞는 분석기+사전 조합을 사용 * Warning! (1) 형태소 분석기 간 직접적인 비교가 아니라, KoNLPy 내부 모듈 간 비교입니다. (2) POS tagging은 형태소 분석과 구분됩니다. 자세한 설명은 구글신께 양보드립니다 :) 24 / 33
  • 25. 좀 더 재밌는걸 해봅시다! 25 / 33
  • 26. 예제: 워드클라우드 그리기 목적: 파이썬만으로 웹문서에서 중요한 명사를 뽑아 워드클라우드로 그리기! * 코드는 지면상 여기에서: http://konlpy.readthedocs.org/en/latest/examples/wordcloud/ (재밌는 예제들도 더 있어요!) 26 / 33
  • 27. 이걸 응용해서 만든 것이: http://pokr.kr/person/1958194 27 / 33
  • 28. Future works for KoNLPy 1. 사전 interface 통일 2. konlpy.download(): 코퍼스, 사전 등 data file을 소스코드에서 분리 3. GCJ 등을 활용해서 JVM을 따로 구동하지 않는 방법 고려 4. Python3 support 5. 한국어 documentation? 28 / 33
  • 30. 몇 가지 트릭 한글 파일 읽기: "Decode early, encode late" >>> with open('somefile.txt', 'r') as f: ... doc = f.read().decode('utf-8') >>> import codecs >>> codecs.open('somefile.txt', encoding='utf-8') sublee님의 Hangulize >>> from hangulize import hangulize >>> print hangulize('Guido van Rossum', 'nld') 히도 판로쉼 30 / 33
  • 31. 몇 가지 트릭 문자의 정체 확인하기 >>> from unicodedata import name >>> print '%s, %s, %s' % (name(u"ㆍ"), name(u"․"), name(u"・")) HANGUL LETTER ARAEA, ONE DOT LEADER, HALFWIDTH KATAKANA MIDDLE DOT >>> "・".decode("unicode-escape") u'xefxbdxa5' >>> ord(u"・"), repr(u"・") (65381, "u'uff65'") 특수문자를 제외하고 어절을 얻고 싶은 경우 >>> import regex >>> regex.findall(ur'p{Hangul}+', u'다람쥐, 헌 쳇바퀴에 타고파.') [u'ub2e4ub78cuc950', u'ud5cc', u'uccc7ubc14ud034uc5d0', u'ud0c0uace0ud30c'] 31 / 33
  • 32. 몇 가지 트릭 한글 romanize하기 >>> from unidecode import unidecode >>> unidecode(u'파이콘') 'paikon' 한자, 한글, 영문가 섞여 있는 경우 Multilingual NLP에서 제안하는 다양한 접근법이 있습니다. 간단한 꼼수 한 가지는: "한자 전처리, 영문 후처리" 한자는 transliterate하고 (ex: '丁新闻' -> 정신문) 한국어 처리를 한 후에 (ex: POS tagging) 영문으로 분류된 tag에 한해 따로 stemming 등을 거침 32 / 33