728x90
반응형
In [15]:
!python --version
# 3.7 이상 버전에서 pip3 install konlpy 실행됨
# 3.6에서는 JPype error 발생
In [1]:
from konlpy.corpus import kobill, kolaw
kobill.fileids()
kolaw.fileids()
c = kolaw.open("constitution.txt").read()
# c
In [19]:
# ! pip install nltk
In [20]:
import nltk
# 유명한 Corpora만 골라서 다운로드
nltk.download('brown')
nltk.download('gutenberg')
Out[20]:
In [23]:
# nltk.download() 하면 링크 떠서 확인하면 됨 / 더블 클릭해서 설치
nltk.download()
Out[23]:
In [28]:
from nltk.corpus import brown, gutenberg
c = brown.open(brown.fileids()[0]).read()
# 앞 3줄만
c.splitlines()[:3]
# / 뒤에 품사가 등장한다.
Out[28]:
In [32]:
c = gutenberg.open(gutenberg.fileids()[0]).read()
c.splitlines()[:3]
# 품사 , 형태소가 없음. Raw text이다.
Out[32]:
In [33]:
from nltk.tokenize import sent_tokenize
nltk.download('punkt')
# punkt = 구두점
Out[33]:
In [35]:
# nltk.tokenize.sent_tokenize( text, language='')
s = sent_tokenize(c) # 문장 단위로 끊어질 것 이다.
In [37]:
len(c.splitlines()), len(s) # 라인 별로 자른 것 . / 문장 단위로 끊은 것
Out[37]:
In [38]:
s[:3]
# 마침표를 기준으로 3개를 쪼개놨다.
# 제목이 문장의 일부로 남아있다.
Out[38]:
In [39]:
from nltk.tokenize import word_tokenize
# 단어 단위로 쪼개주는 함수
words = word_tokenize(s[0])
print(words)
# 문장을 넣었으니 마지막은 .으로 나온다.
In [50]:
sent_tokenize("Hello World. Hello World.") # . ? !로 잘림 ... 말 줄임표는 인식 못함
Out[50]:
In [51]:
sent_tokenize("오늘 미세먼지 보통이다. 불금을 즐기자!") # sent_tokenize는 그대로 써도 됨 !
# 띄어쓰기 안되어있으면 자를 수가 없음.
Out[51]:
In [52]:
from nltk.tokenize import TweetTokenizer
In [56]:
TweetTokenizer().tokenize("오늘 미세먼지 보통이다. 불금을 즐기자! :) :()")
# 이모티콘을 인식함 ( 감정 표현 )
# 문어체보다 구어체 분석에 잘 어울림
Out[56]:
In [55]:
word_tokenize("오늘 미세먼지 보통이다. 불금을 즐기자! :) :()")
# 이모티콘을 그냥 기호로 인식함
Out[55]:
In [61]:
# 정규식을 가지고 자름
from nltk.tokenize import regexp_tokenize
# 추가적으로 패턴이 필요함
regexp_tokenize(s[2], "([A-Za-z]+)")
# A-Z a-z 가 한 개 이상 나오는 조합
Out[61]:
In [62]:
pattern = "([가-힣]+)" # 한글만 추출
regexp_tokenize("오늘 미세먼지 보통이다. 불금을 즐기자! :) :()",pattern)
Out[62]:
In [71]:
# 만약에 동일한 단어를 여러 번 쓴다면??
t = regexp_tokenize("오늘 미세먼지 먼지 미세 미세먼지 보통이다. 불금을 즐기자! :) :()",pattern)
# 독립이라고 가정하고 계산, 실제 연관은 되어있지만 ( 이건 딥러닝에서 ! )
In [72]:
# 위는 아직 단어가 아님 / 어절이나 토큰이라고 불러야함! ( 의미가 없기 때문 )
from nltk import Text
In [73]:
tinstance = Text(t)
tinstance
Out[73]:
In [76]:
len(tinstance), len(set(tinstance)) , tinstance.vocab()
## 유일한 단어는 7개가 있는 것 : Unique하게함
## .vocab하면 단어들의 frequency가 나온다.
Out[76]:
In [89]:
import matplotlib as plt
# 한글출력
plt.rcParams['font.family'] = 'NanumBarunGothic'
plt.rcParams['axes.unicode_minus'] = False
tinstance.plot()
In [ ]:
In [ ]:
In [ ]:
728x90
반응형