O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
자바, 미안하다! 
PyCon Korea 2014 
Korean NLP with Python 
Lucy Park (박은정) 
KoNLPy on GitHub 
1 / 33
개요 NLTK 덕에 파이썬으로 자연어처리를 하는 것이 편리해졌다. 
단, 한국어만 분석하려하지 않는다면. 
파이썬으로 한국어를 분석할 수는 없을까? 
국문, 영문, 중문 등 다양한 문자가 섞여 있는 문서는 어떻게 분 
...
박은정 
(a.k.a. 
lucypark, 
echojuliett, e9t) 
개발하는 데이터 분석가. 
서울대학교 데이터마이닝 센터 박사과정 
"대한민국 정치의 모든 것" 만드는 팀포퐁 멤버 
Just another ...
"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를 시작으로 국내외에서 여러 "오픈소스" 형태소 분석기가 개발됨 ...
이러한 역작들을, 
더 많은 사람들이 쉽게 이용하게 할 수 있을까? 
13 / 33
그러한 관점에서 
누구나 쉽게 NLP를 할 수 있게 해준 패키지 두 개: 
KoNLP, for R 
NLTK, for Python 
14 / 33
KoNLP, for R https://github.com/haven-jeon/KoNLP 
한나눔 형태소 분석기 R interface 
세종계획한국어 코퍼스, 사전 등을 마련한 10년 계획 정부사업의 확장적 사용 
그 외...
NLTK, for Python http://nltk.org 
Porter, snowball, Lancaster 등 다양한 stemming 알고리즘 포함 
그 외 chunking, NER, classification 알고...
파이썬으로 형태소 분석, 
한국어 NLP 할 수 있으면 정말 좋겠네 
1. 형태소 분석기 뿐 아니라, 더 많은 자연어 처리 기능 & 코퍼스를 포괄하면서 
2. 여러 형태소 분석기 중에서는 목적/취향에 맞는 것을 쉽게 선...
KoNLPy, for Python http://konlpy.rtfd.org 
"Standing on the shoulders of giants" 
2014년 7월, 한나눔 형태소 분석기만 담아 첫 릴리즈 
2014년 8...
한 번 써볼까요? 
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(k...
>>> from konlpy.tag import * 
>>> from konlpy.utils import pprint 
>>> engines = [Kkma(), Hannanum(), Mecab()] 
>>> s = u"...
태그셋 비교: Korean POS tags comparison chart 
23 / 33
형태소 분석 모듈 간 성능 비교 
형태소 분석기는 속도, 메모리 사용, 정확도 등으로 성능 평가 
One-size-fits-all 이라기보다는 서로 장단점이 있는 경우가 많음 
알고리즘 뿐 아니라 사전의 영향도 매우**...
좀 더 재밌는걸 해봅시다! 
25 / 33
예제: 워드클라우드 그리기 
목적: 파이썬만으로 웹문서에서 중요한 명사를 뽑아 워드클라우드로 그리기! 
* 코드는 지면상 여기에서: http://konlpy.readthedocs.org/en/latest/examples...
이걸 응용해서 만든 것이: 
http://pokr.kr/person/1958194 
27 / 33
Future works for KoNLPy 
1. 사전 interface 통일 
2. konlpy.download(): 코퍼스, 사전 등 data file을 소스코드에서 분리 
3. GCJ 등을 활용해서 JVM을 따로 ...
시간이 좀 남았나요? 
29 / 33
몇 가지 트릭 
한글 파일 읽기: "Decode early, encode late" 
>>> with open('somefile.txt', 'r') as f: 
... doc = f.read().decode('utf-8...
몇 가지 트릭 
문자의 정체 확인하기 
>>> from unicodedata import name 
>>> print '%s, %s, %s' % (name(u"ㆍ"), name(u"․"), name(u"・")) 
HAN...
몇 가지 트릭 
한글 romanize하기 
>>> from unidecode import unidecode 
>>> unidecode(u'파이콘') 
'paikon' 
한자, 한글, 영문가 섞여 있는 경우 
Multil...
감사합니다 :D 
http://lucypark.kr 
@echojuliett 
33 / 33
Próximos SlideShares
Carregando em…5
×

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

@PyCon Korea 2014

NLTK 덕에 파이썬으로 자연어처리를 하는 것이 편리해졌다. 단, 한국어만 분석하려하지 않는다면. 파이썬으로 한국어를 분석할 수는 없을까? 국문, 영문, 중문 등 다양한 문자가 섞여 있는 문서는 어떻게 분석을 할 수 있을까?

이 발표에서는 자연어처리의 기초적인 개념을 다룬 후, NLTK 등의 자연어처리 라이브러리와 한국어 분석을 위해 개발중인 KoNLPy를 소개한다. 또, 파이썬으로 한국어를 분석할 때 유용한 몇 가지 트릭을 공유한다.

http://konlpy.readthedocs.org

  • Seja o primeiro a comentar

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

  1. 1. 자바, 미안하다! PyCon Korea 2014 Korean NLP with Python Lucy Park (박은정) KoNLPy on GitHub 1 / 33
  2. 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. 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
  4. 4. "caricature" 4 / 33
  5. 5. "사람의 생김새를 결정짓는 것은 골격과 피부의 미묘한 변화에서 비롯되는 차이점이고, 그 차이점을 없애 버린다면 모든 사람의 생김새는 똑같을 것입니다." -- 만화가 김충원 5 / 33
  6. 6. "데이터를 결정짓는 것은 행과 열의 미묘한 변화에서 비롯되는 차이점이고, 그 차이점을 없애 버린다면 모든 데이터는 똑같을 것입니다." 6 / 33
  7. 7. 수많은 공통점을 두고도 차이를 만드는 요인. 데이터 분석의 관점에서는: "Features" 7 / 33
  8. 8. 문서 간 차이를 만드는 "Features"는 뭘까? 8 / 33
  9. 9. 9 / 33
  10. 10. 10 / 33
  11. 11. 형태소 언어의 최소 의미 단위. * 영어는 tokenizing, stemming으로 충분한 경우도 있지만 결국 마찬가지. ex: "unbreakable"=="un-"+"break"+"-able" 11 / 33
  12. 12. 형태소분석 with C/C++ & Java corpus linguistics == 언어 분석을 computational하게 해보자! 1995년, KTS를 시작으로 국내외에서 여러 "오픈소스" 형태소 분석기가 개발됨 형태소 분석기를 만든다 == 알고리즘 구현 + 방대한 코퍼스 기반으로 사전 구축 한마디로, 정말 대단한 작업 * 형태소 분석기 링크들은 여기에: http://konlpy.readthedocs.org/en/latest/references 12 / 33
  13. 13. 이러한 역작들을, 더 많은 사람들이 쉽게 이용하게 할 수 있을까? 13 / 33
  14. 14. 그러한 관점에서 누구나 쉽게 NLP를 할 수 있게 해준 패키지 두 개: KoNLP, for R NLTK, for Python 14 / 33
  15. 15. KoNLP, for R https://github.com/haven-jeon/KoNLP 한나눔 형태소 분석기 R interface 세종계획한국어 코퍼스, 사전 등을 마련한 10년 계획 정부사업의 확장적 사용 그 외 NLP를 편리하게 하는 각종 함수 구현 많은 down-to-earth 예제를 담은 documentation "Python으로도 이런게 있으면 좋겠다!" 이름에도 내포돼있듯 KoNLPy의 가장 큰 inspiration! 15 / 33
  16. 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. 17. 파이썬으로 형태소 분석, 한국어 NLP 할 수 있으면 정말 좋겠네 1. 형태소 분석기 뿐 아니라, 더 많은 자연어 처리 기능 & 코퍼스를 포괄하면서 2. 여러 형태소 분석기 중에서는 목적/취향에 맞는 것을 쉽게 선택할 수 있게 3. 누구나 참여할 수 있는, 여과없는 오픈소스를 4. 상세한 예제를 담은 문서와 함께 5. 가장 Pythonic 한 형태로 (...로 만드는 것이 "목표".) 17 / 33
  18. 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
  19. 19. 한 번 써볼까요? 19 / 33
  20. 20. Installation $ pip install JPype1 # Aㅏ... dependencies... $ pip install konlpy 20 / 33
  21. 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. 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. 23. 태그셋 비교: Korean POS tags comparison chart 23 / 33
  24. 24. 형태소 분석 모듈 간 성능 비교 형태소 분석기는 속도, 메모리 사용, 정확도 등으로 성능 평가 One-size-fits-all 이라기보다는 서로 장단점이 있는 경우가 많음 알고리즘 뿐 아니라 사전의 영향도 매우**2 큼 자신의 목적/취향에 맞는 분석기+사전 조합을 사용 * Warning! (1) 형태소 분석기 간 직접적인 비교가 아니라, KoNLPy 내부 모듈 간 비교입니다. (2) POS tagging은 형태소 분석과 구분됩니다. 자세한 설명은 구글신께 양보드립니다 :) 24 / 33
  25. 25. 좀 더 재밌는걸 해봅시다! 25 / 33
  26. 26. 예제: 워드클라우드 그리기 목적: 파이썬만으로 웹문서에서 중요한 명사를 뽑아 워드클라우드로 그리기! * 코드는 지면상 여기에서: http://konlpy.readthedocs.org/en/latest/examples/wordcloud/ (재밌는 예제들도 더 있어요!) 26 / 33
  27. 27. 이걸 응용해서 만든 것이: http://pokr.kr/person/1958194 27 / 33
  28. 28. Future works for KoNLPy 1. 사전 interface 통일 2. konlpy.download(): 코퍼스, 사전 등 data file을 소스코드에서 분리 3. GCJ 등을 활용해서 JVM을 따로 구동하지 않는 방법 고려 4. Python3 support 5. 한국어 documentation? 28 / 33
  29. 29. 시간이 좀 남았나요? 29 / 33
  30. 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. 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. 32. 몇 가지 트릭 한글 romanize하기 >>> from unidecode import unidecode >>> unidecode(u'파이콘') 'paikon' 한자, 한글, 영문가 섞여 있는 경우 Multilingual NLP에서 제안하는 다양한 접근법이 있습니다. 간단한 꼼수 한 가지는: "한자 전처리, 영문 후처리" 한자는 transliterate하고 (ex: '丁新闻' -> 정신문) 한국어 처리를 한 후에 (ex: POS tagging) 영문으로 분류된 tag에 한해 따로 stemming 등을 거침 32 / 33
  33. 33. 감사합니다 :D http://lucypark.kr @echojuliett 33 / 33

×