딥러닝 (Deep Learning)/NLP 자연어처리

텍스트 데이터 전처리 - 1) 토큰화

DS지니 2021. 4. 18. 23:03
728x90
반응형

텍스트의 토큰화(Tokenization)

<텍스트 쪼개기>

텍스트는 단어별, 문장별, 형태소별로 나눌 수 있다. 이렇게 작게 나누어진 하나의 단위를 토큰(token)이라고 한다.

그리고 입력된 긴 텍스트를 잘게 나누는 과정을 토큰화(tokenization) 라고 한다.

 

1) enumerate, split

words = "Strawberry, Orange, Coconut, Lemon, Banana!;"
for count, ele in enumerate(words[:5]): 
    print(count, ele)
    
>> 0 S
>> 1 t
>> 2 r
>> 3 a
>> 4 w
words.split(', ')
>> ['Strawberry', 'Orange', 'Coconut', 'Lemon', 'Banana!;']

 

2) 정규식 사용

# 정규식 라이브러리
import re

# 정규식
# []: [] 사이 문자를 매치, ^: not
regex = r"[^a-zA-Z0-9 ]"

# 정규식을 적용할 스트링
text = ("(LET Me introduce) myself!, DS!\n")

# 치환할 문자
subst = ""

result = re.sub(regex, subst, text)

print(result)

>> LET Me introduce myself DS
def tokenize(text):

    # 정규식 적용
    tokens = re.sub(regex, subst, text)

    # 소문자로 치환
    tokens = tokens.lower().split()
    
    return tokens
tokenize(text)

>> ['let', 'me', 'introduce', 'myself', 'ds']

 

3) 케라스 사용

# 단어쪼개기

from tensorflow.keras.preprocessing.text import text_to_word_sequence

text = "졸리고 피곤하고 자고 싶다 낼 신나는 월요일"
result = text_to_word_sequence(text)
print(result)

>> ['졸리고'.'피곤하고'.'자고'.'싶다'.'낼'.'신나는'.'월요일']
# Bow (Bag of words) 단어의 빈도 수

from tensorflow.keras.preprocessing.text import Tokenizer

docs = ['아버지 가방에 들어가신다.',
        '아버지, 어머니, 언니, 나, 동생 이렇게 다섯 가족입니다.',
        '우리 가족은 화목한 가족입니다.',
        '우리집은 방이 총 3개 입니다.']

token = Tokenizer()
token.fit_on_texts(docs)

print(token.word_counts)
print("총", token.document_count, "문장이 사용됨")  #총 문장 개서 출력
print(token.word_docs)  # 단어가 포함된 문장개수 출력
print(token.word_index) # 토큰 인덱스 출력


>> OrderedDict([('아버지', 2), ('가방에', 1), ('들어가신다', 1), ('어머니', 1), ('언니', 1), ('나', 1), ('동생', 1), ('이렇게', 1), ('다섯', 1), ('가족입니다', 2), ('우리', 1), ('가족은', 1), ('화목한', 1), ('우리집은', 1), ('방이', 1), ('총', 1), ('3개', 1), ('입니다', 1)])
>> 총 4 문장이 사용됨
>> defaultdict(<class 'int'>, {'가방에': 1, '아버지': 2, '들어가신다': 1, '동생': 1, '언니': 1, '어머니': 1, '이렇게': 1, '가족입니다': 2, '나': 1, '다섯': 1, '가족은': 1, '우리': 1, '화목한': 1, '방이': 1, '입니다': 1, '3개': 1, '우리집은': 1, '총': 1})
>> {'아버지': 1, '가족입니다': 2, '가방에': 3, '들어가신다': 4, '어머니': 5, '언니': 6, '나': 7, '동생': 8, '이렇게': 9, '다섯': 10, '우리': 11, '가족은': 12, '화목한': 13, '우리집은': 14, '방이': 15, '총': 16, '3개': 17, '입니다': 18}

 

728x90
반응형

'딥러닝 (Deep Learning) > NLP 자연어처리' 카테고리의 다른 글

한국어 nlp 데이터셋 참고  (0) 2021.10.23
NLP 기초 설명  (0) 2021.04.18