자연어 처리에는 다양한 토크나이징도구들이 있는데
이번에는 자연어 토크나이징 도구를 살펴 볼 예정
자연어 토크나이징 도구
토크나이징이란,
입력 정보(문장 또는 발화)를 하나의 특정 기본 단위로 자르는 것
// 영어 토크나이징 라이브러리
- 여기서는 영어 토크나이징 작업을 수행할 수 있는 라이브러리를 소개한다.
=== NLTK ===
- 파이썬에서 영어 텍스트 전처리 작업을 하는데 많이 쓰이는 라이브러리이다.
- 50여 개가 넘는 말뭉치 리소스를 활용해 영어 텍스트를 분석할 수 있게 제공한다.
# 라이브러리 설치
conda install nltk
import nltk
nltk.download()
- nltk는 단순히 라이브러리를 설치한다고 해서 바로 토크나이징 할 수 없다. 말뭉치를 다운받아야한다.
- 토크나이징을 위해 'all-corpora' 말뭉치를 다운받는다.
# 단어 단위 토크나이징
from nltk.tokenizer import word_tokenize
sentence = "영어 문장 입력"
word_tokenize(sentence)
- word_tokenize 함수를 사용하면 입력한 문장이 단어 단위로 구분되어 리스트로 출력된다.
# 문장 단위 토크나이징
from nltk.tokenize import sent_tokenize
sentence = "영어 문장 입력"
sent_tokenize(sentence)
- sent_tokenize 함수를 사용하면 자동으로 문장기준으로 나눠준다.
# 텍스트 데이터 전처리
- nltk 라이브러리는 불용어 사전이 내장돼 있어서 따로 불용어를 정의할 필요없이 바로 사용 가능하다.
=== Spacy ===
- NLTK와 같은 오픈소스 라이브러리이다.
- 주로 교육, 연구목적이 아닌 상업용 목적으로 만들어졌다는 점에서 다른 목적으로 만들어진 라이브러리이다.
- 현재 영어를 포함한 8개 국어에 대한 자연어처리 모듈을 제공한다.
// 한글 토크나이징 라이브러리
=== KoNLPy ===
- 한글 자연어 처리를 쉽고 간결하게 처리할 수 있도록 만들어진 오픈소스 라이브러리이다.
# 라이브러리 설치
pip install JPype1-0.63-cp36-cp36m-xin_amd64.whl
pip install konlpy
- 1.7버전 이상의 자바가 설치되어있어야한다
- JAVA_HOME으로 환경변수를 만들고 경로는 자바가 설치된 경로로 지정
- 0.5.7버전 이상의 JPype1을 설치해야한다.
- 그 다음에 konlpy를 설치한다.
# 형태소 단위 토크나이징
- 한글 텍스트의 경우에는 형태소 단위 토크나이징이 필요할 때가 있다.
- 각 형태소 분석기는 클래스 형태로 돼 있고, 이를 객체로 생성한 후 매서드를 호출해서 토크나이징
# 형태소 분석 및 품사 태밍
- 형태소란, 의미를 가지는 가장 단위로서 더 쪼개지면 의미를 상실하는 것들이다.
- 형태소 분석기 목록
Hannanum / Kkma / Komoran / Mecab / Okt(Twitter)
- 위 객체들은 모두 동일하게 형태소 분석 기능을 제공하는데, 각기 성능이 조금씩 다르다.
- 그중 하나인 Okt를 사용해서 예제를 실행
# Okt 형태소 분석기
from konlpy.tag import Okt
#객체 생성
okt = Okt()
1. okt = Okt()
- 객체 생성
2. okt.morphs()
- 텍스트를 형태소 단위로 나눈다. 옵션으로는 norm과 stem이 있다
- norm은 normalize의 약자로 문장을 정규화하는 역할
- stem은 각 단어에서 어간을 추출하는 기능
3. okt.nouns()
- 텍스트에서 명사만 뽑아낸다.
4. okt.phrases()
- 텍스트에서 어절을 뽑아낸다.
5. okt.pos()
- 각 품사를 태깅하는 역할.
- 품사를 태깅한다는 것은 주어진 텍스트를 형태소 단위로 나누고, 나눠진 각 형태소를 그에 해당하는 품사와 함께 리스트화 하는 것을 의미한다.
# 실제 사용
text = "한글 자연어 처리는 재밌다. 이제부터 열심히 해야지ㅎㅎㅎㅎ"
okt.morphs(text)
okt.morphs(text, stem = True)
- okt.morphs(문장) : 텍스트를 형태소 단위로 나눠준다.
- okt.morphs(문장, stem =True) : 텍스트를 형태소 단위로 나누는데, 이때 각 단어에서 어간을 추출한다.
text = "한글 자연어 처리는 재밌다. 이제부터 열심히 해야지ㅎㅎㅎㅎ"
okt.nouns(text)
okt.phrases(text)
- okt.nouns(text) : 명사만 추출
- okt.phrases(text) : 어절단위로 나눠서 추출
text = "한글 자연어 처리는 재밌다. 이제부터 열심히 해야지ㅎㅎㅎㅎ"
okt.pos(text)
okt.pos(text, join=True)
- okt.pos(text) : 품사태깅을 하는 함수
- okt.post(text, join=True) : join=True로 주면 형태소와 품사가 함께 나온다.
그 밖의 라이브러리(전처리)
Numpy_넘파이
- 빠르고 효율적인 계산을 위해 만들어진 파이썬 라이브러리이다.
- 고성능의 다차원 배열 객체와 이러한 배열을 계산할 효율적인 도구를 제공한다.
- 넘파이의 핵심은 ndarray 객체이다.
# 넘파이 설치
conda intsall numpy
import numpy as np
# 넘파이 배열의 속성
- ndarray.ndim : 배열의 축(차원)의 수를 반환한다.
- ndarray.shape : 배열의 형태를 반환한다.
- ndarray.size : 배열 내 원소의 총 개수를 반환한다.
- ndarray.dtype : 배열 내 원소들의 자료형을 반환한다.
#넘파이 배열 생성
- numpy.zeros : 모든 배열의 원소가 0인 배열을 생성.
- numpy.ones : 모든 배열의 원소가 1인 배열을 생성.
- numpy.empty : 배열의 크기만 정해주고 원소는 초기화하지 않은 배열 생성. 원소는 매우크거나 작은값
- numpy.arange : 파이썬의 range 함수와 유사한 형태로 배열을 생성. 배열의 원소가 수열을 구성
- numpy.full : 배열의 모든 값이 하나의 상수인 배열을 생성
- numpy.eye : 지정한 크기의 단위행렬을 생성한다.
- numpy.random.random : 배열의 원소를 임의 값으로 생성한다. 값은 0부터 1사이
# 넘파이 기본 연산
- np.add(a,b) : 배열의 합 = a + b
- np.subtract(a,b) : 배열의 차 = a - b
- np.dot(a,b) : 배열의 내적계산 = a.dot(b)
- axis = 0 : 열 기준
- axis = 1 : 행기준
>> 기본적인 연산 외에 중요한 연산 기능은 축을 기준으로 한 연산
# 넘파이 배열 인덱싱, 슬라이싱
- 넘파이 배열은 파이썬 리스트와 마찬가지로 인덱싱과 슬라이싱 기능 제공
# 넘파이 배열 형태 변환
- ndarray.ravel() : 배열을 1차원 배열로 만든다
- ndarray.reshape() : 배열의 형태를 바꾼다.
: 특정한 행, 열만 지정해도 나머지는 자동으로 맞출 수 있다. (나머지에 -1을 준다)
- ndarray.T : 트랜스포즈 된 배열을 만든다. 전치만 사용할 수 있는 연산이 많다.
# 넘파이 브로드 캐스팅
- 넘파이는 브로드캐스팅이라는 기능을 통해 다른 형태의 배열끼리도 연산이 가능하게 한다.
Pandas_판다스
- 데이터 분석을 위한 라이브러리
- 편리한 데이터 구조와 데이터 분석 기능을 제공하기 때문에 데이터를 다루기 위해서는 반드시 알아야한다.
# 판다스 설치
conda install pandas
import pandas as pd
# 판다스의 데이터 구조
1> 시리즈 ( Series ) : 1차원의 데이터 구조
2> 데이터 프레임 ( DataFrame) : 2차원의 데이터 구조
3> 패널 (Panel) : 3차원의 데이터 구조
# 판다스 데이터 생성
1> 시리즈 생성
pandas.Series( data, index, dtype, copy )
- data를 제외한 값은 생략할 수 있다.
- 시리즈 데이터는 기본적으로 순서대로 index가 존재한다
- 딕셔너리를 활용해 시리즈를 생성하면 index값은 키 값으로 들어간다.
2> 데이터 프레임 생성
pandas.DataFrame( data, index, columns, dtype, copy )
- 데이터 프레임도 data를 제외한 값은 생략 가능하다
- columns을 통해 각 열의 라벨을 지정할 수 있다.
- 파이썬의 딕셔너리를 활용해 데이터 프레임을 생성하면, 칼럼은 키 값으로 지정된다.
# 판다스 데이터 불러오기 및 쓰기
pandas.read_csv('file_path')
# 판다스 데이터 다루기
data_frame.describe()
- describe() 함수를 사용하면 데이터에 대한 평균, 표준편차 등 다양한 수치 값을 얻을 수 있다.
Matplotlib
conda install matplotlib
import matplotlib
Matplotlib.pyplot
- 파이플롯은 맷플롯립 안에 포함된 서브 모듈이다. 시각화를 위한 많은 함수가 있다.
# 파이플롯 사용
import matplotlib.pyplot as plt
%matplotlib inline
- 주피터 노트북을 사용하는 경우에는 아래 코드를 입력해, 주피터 노트북 내부에서 그림을 표시
# 기본적인 그래프
X = [1,3,5,7,9]
Y = [100,200,300,400,500]
plt.plot(X,Y)
- 위의 코드를 실행시키면 아래와 같은 그래프가 나온다.
# 판다스 데이터 시각화
import pandas as pd
data_frame = pd.read_csv('./data/datafile.csv')
data_frame.plot()
- 판다스의 시리즈와 데이터 프레임은 기본적으로 plot() 함수를 내장한다.
- 따라서 맷플롯립을 따로 불러오지 않고도 판다스의 plot() 함수를 사용할 수 있다.
- 누적된 값을 가지고 데이터의 증감에 대해 시각화 하고 싶다면 pandas.cumsum() 함수 사용
data_sum = data_frame.cumsum()
data_sum.plot()
- 데이터를 누적 값으로 바꿔서 출력해준다.
'Natural_Language' 카테고리의 다른 글
[NLP] 03. 자연어 처리 개요 - 텍스트 분류 (0) | 2019.04.28 |
---|---|
[NLP] 03. 자연어 처리 개요 - 단어표현/단어임베딩/단어벡터 (0) | 2019.04.28 |
[NLP] 02. 자연어 처리 개발 준비 - 사이킷런 (0) | 2019.04.27 |
[NLP] 02.자연어 처리 개발 준비 - Tensorflow (2) | 2019.04.27 |
[NLP] 텐서플로와 머신러닝으로 시작하는 자연어처리 (0) | 2019.04.27 |