- 피처 벡터화, 피처 추출

머신 러닝 알고리즘은 숫자형의 피처 기반 데이터만 입력 받을 수 있기 때문에 텍스트를 머신러닝에 적용하기 위해서는 비정형 텍스트 데이터를 word 기반의 다수의 피처로 추출하고 이 피처에 단어 빈도수와 같은 숫자 값을 부여, 텍스는 단어의 조합인 벡터값으로 표현할 수 있다 

 

 

- NLTK(National Language Toolkit for Python) : 파이썬의 가장 대표적인 NLP 패키지. 방대한 데이터 세트와 서브 모듈을 가지고 이씅며, NLP의 모든 영역을 커버하고 있다. 

 

 

 

- 텍스트 정규화 작업

  • 클렌징(cleansing) : 텍스트에서 분석에 오히려 방해가 되는 불필요한 문자, 기호 등을 사전에 제거하는 작업. 예를 들어 html, xml 태그 같은 것
  • 텍스트 토큰화 : 문서에서 문장을 분리하는 문장 토큰화와 문장에서 단어를 토큰으로 분리하는 단어 토큰화로 나눔
  • 스톱워드(stop word) : 분석에 큰 의미가 없는 단어. is, a, the 등 문장을 구성하는 필수 문법 요소지만 문맥적으로 큰 의미가 없는 단어를 말함
  • Stemming / Lemmatization : 원형 단어를 찾는 것
    • Stemming 은 원형 단어로 변환 시 일반적인 방법을 적용하거나 더 단순화된 방법을 적용해 원래 단어에서 일부 철자가 훼손된 어근 단어를 추출하는 경향
    • Lemmatization : 품사와 같은 문법적인 요소와 더 의미적인 부분을 감안해 정확한 철자로 된 어근 단어를 찾아줌. 더 오랜 시간 필요

 

 

 

 

텍스트 토큰화

 

1.  문장 토큰화 (Sentence tokenization) : 문장의 마침표, 개행문자(\n) 등 문장의 마지마을 뜻하는 기호에 따라 분리하는 것이 일반적. 정규 표현식에 따른 문자 토큰화도 가능

from nltk import sent_tokenize
text_sample = 'The Matrix is everywhere its all around us, here even in this room. \
               You can see it out your window or on your television. \
               You feel it when you go to work, or go to church or pay your taxes.'
sentences = sent_tokenize(text=text_sample)
print(type(sentences),len(sentences))
print(sentences)

- NTLK에서 자주 쓰이는 sent_tokeinze를 사용한 에제입니다. 

- 개행문자에 따라 문장으로 분류된 list 형태를 가진 객체가 됩니다.

 

 

2. 단어 토큰화(Word tokenization) : 문장을 단어로 토큰화하는 것. 기본적으로 공백, 콤마, 마침표, 개행문자로 단어 분리하지만 정규 표현식도 가능

from nltk import word_tokenize

sentence = "The Matrix is everywhere its all around us, here even in this room."
words = word_tokenize(sentence)  # space 단위로 쪼개짐 
print(type(words), len(words))
print(words)

 

 

3. 문장과 단어 토큰을 한번에 수행

from nltk import word_tokenize, sent_tokenize

#여러개의 문장으로 된 입력 데이터를 문장별로 단어 토큰화 만드는 함수 생성
def tokenize_text(text):
    
    # 문장별로 분리 토큰
    sentences = sent_tokenize(text)
    # 분리된 문장별 단어 토큰화
    word_tokens = [word_tokenize(sentence) for sentence in sentences]
    return word_tokens

#여러 문장들에 대해 문장별 단어 토큰화 수행. 
word_tokens = tokenize_text(text_sample)
print(word_tokens)

 

 

- 반대로 원래 문자으로 만들기

#문장으로 다시 연결
pharases=[" ".join(sentense) for sentense in sentences_list]#단어와 단어를 " "(띄워쓰기)로 연결해준다. 
#문단으로 연결
doc = '\n'.join(pharases)
#문장간의 연결을 보드랍게 하기
doc=doc.replace(' ,',",").replace(' .','.').replace('\n', '')
doc

 

#정규 표현식을 이용하여 문장으로 연결하기
import re
pharases=[" ".join(sentense) for sentense in sentences_list]#단어와 단어를 " "(띄워쓰기)로 연결해준다. 
Doc="\n".join(pharases)
semiotic = re.compile('\s(\W)', re.M) #\s ( 스페이스 , 텝 , /n)이 있고 (\W)(숫자 문자 언더바를 제외한 모든 문자) 의 그룹
def findGroup(m): 
    return m.group(1) #위에 표현식에 일치하는 애들을 proup(1)으로 리턴해주는 함수
Doc = semiotic.sub(findGroup, Doc) 
Doc

'머신러닝 in Python' 카테고리의 다른 글

텍스트 분석_BOW  (0) 2019.08.14
텍스트 분석_텍스트 전처리 2  (0) 2019.08.14
텍스트 분석이란?  (0) 2019.08.13
[R] 네이버 크롤링  (0) 2019.08.12
[R]다음 영화 평점 크롤링  (0) 2019.08.12

+ Recent posts