230515 / BSA11. NLP (Natural Language Processing)

BSA07_ NLP-1.ipynb

 

패키지 호출

import re
import nltk

from nltk.tokenize import word_tokenize
from nltk.tokenize import sent_tokenize
from nltk.tokenize import RegexpTokenizer
from nltk import ngrams

 

토큰화

빅통분 = """이 강의에서는 Windows 10, 11 하에서 Apache에서 제공하는 다양한 빅데이터처리 툴(Hadoop, Spark, Kafka 등)을 
설치하고 환경 설정하는 작업을 직접 수행하기 때문에 컴퓨터에 대한 사전 지식이 없는 경우 수강하기 어려움. 
빅데이터의 특징인 3V와 같이 이 교과에서는 상당한 양과 다양한 내용을 빠르게 강의하기 때문에
강의를 수강하는데 필요한 통계 지식(회귀분석, 다변량분석 등)을 사전에 알고 있어야 함. 
일부 R이나 scala도 사용하는 경우도 있으나 기본 프로그램 언어는 python이며 python에 대해 기본적인 내용은 알고 있어야 함.
모든 프로젝트는 개인별로 평가를 받으며 별도의 팀프로젝트 없음.
모든 프로그램은 직접 코딩해야 함(소스 코드는 워터마크가 숨겨진 이미지 형태로 제공).
"""

빅통분.split()  # 공백 기준으로 분리
  
r = re.compile(" ")  # 공백 기준으로 분리 (띄어쓰기(new line) 포함)
r.split(빅통분)

r = re.compile("[0-9]")  # 숫자를 기준으로 자름 (숫자가 없는 데이터가 표시)
r.split(빅통분)

r = re.compile("\s")  # new line이 사라졌지만 여전히 .이나 ,가 남아있음
r.split(빅통분)
예제문장 =  ['This is the first document.', 'This document is the second document.', 
         'And this is the third one.', 'Is this the first document?']
         
         
r = re.compile(" ")
r.split(예제문장)  # 하나의 문자열에 대해서만 적용 가능 (리스트는 적용 불가)      

# 하나의 데이터(문자열)로 묶는 작업
결합문장 = "\n".join(예제문장)  # 각 문자열 사이에 new line을 넣어 결합
print(결합문장)  # print문에서는 new line을 실행시킴
결합문장

r = re.compile("\s")
r.split(결합문장)

 

1. 단어 토큰화

# 토큰화 작업을 위해 'punkt' 파일이 필요(한번만 실행)
# nltk.download('punkt')

토큰 = word_tokenize(결합문장)  # .와 ,를 분리함
토큰

 

2. 문장 토큰화

토큰 = sent_tokenize(결합문장)
토큰

 

3. 정규표현식을 이용한 토큰화

예시 = "Python's favorite food is perl. \"Python is very easy.\" he says."

# 문자와 숫자가 있는 경우 + 앞의 문자가 최소 1개 이상인 경우
토큰화 = RegexpTokenizer("[\w]+")
토큰 = 토큰화.tokenize(예시)
토큰  # 문자와 숫자가 아닌 경우 제외됨

# 특수문자 포함
토큰화 = RegexpTokenizer("[\w]+")
토큰 = 토큰화.tokenize(빅통분)
토큰[0:30]

# 한글만 가져오는 경우
토큰화 = RegexpTokenizer("[가-힣]+") 
토큰 = 토큰화.tokenize(빅통분)
토큰[0:30]  # 영문도 제외됨

# 영문만 가져오는 경우
토큰화 = RegexpTokenizer("[a-zA-Z]+")
토큰 = 토큰화.tokenize(빅통분)
토큰  # 한글이 제외됨

# 특수문자 포함
토큰화 = RegexpTokenizer("[\s]+",gaps=True)
토큰 = 토큰화.tokenize(예시)
토큰
예시 = 'ㅋㅋㅋㅋ'

토큰화 = RegexpTokenizer("[가-힣]+")  
토큰 = 토큰화.tokenize(예시)
토큰  # 인식하지 못함

토큰화 = RegexpTokenizer("[ㄱ-ㅎ]+")
토큰 = 토큰화.tokenize(예시)
토큰  # ['ㅋㅋㅋㅋ']
 
예시 = '망했다ㅋㅋㅋㅋ'

토큰화 = RegexpTokenizer("[ㄱ-ㅎ가-힣]+")
토큰 = 토큰화.tokenize(예시)
토큰  # ['망했다ㅋㅋㅋㅋ']

 

 

기타 Tokenizer

  • WhiteSpaceTokenizer : 공백 기준으로 토큰화
  • WordPunktTokenizer : text를 알파벳 문자, 숫자, 알파벳 이외의 문자 리스트로 토큰화
  • MWETokenizer : 여러 단어를 하나의 개체(multi-word expression)로 토큰화 (ex. United States of America)
  • TweetTokenizer : 트위터에서 사용되는 문장을 토큰화

 

4. n-gram

bigram = ngrams(결합문장.split(),2)

list(bigram)

 

PoS(Parts of Speech) 태깅(Tagging) : 품사

## 한번만 실행
# nltk.download("averaged_perceptron_tagger")

nltk.pos_tag(word_tokenize(결합문장))