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 |