🌐 해당 카테고리에 작성하는 글은 모두 안상준, 유원준 <딥 러닝을 이용한 자연어 처리 입문> 를 요약했습니다.
🌐 비전공자 개발자가 자연어 처리 대학원에 가고싶어 공부한 기록들입니다.
🌐 해당 실습은 구글의 collab을 통해 실시했습니다.
🌐 전 내용과 이어집니다.
https://onnnzeoz.tistory.com/102
텍스트 전처리 기법(정규화, 어간 추출, 표제어 추출)
🌐 해당 카테고리에 작성하는 글은 모두 안상준, 유원준 를 요약했습니다.🌐 비전공자 개발자가 자연어 처리 대학원에 가고싶어 공부한 기록들입니다.🌐 해당 실습은 구글의 collab을 통해
onnnzeoz.tistory.com
02-04 불용어(Stopword)
문장에서는 자주 등장하지만 실제 의미 분석을 하는데는 거의 기여하는 바가 없는 단어 토큰을 제거하는 작업
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from konlpy.tag import Okt
stop_words_list = stopwords.words('english')
print('불용어 개수 :', len(stop_words_list))
print('불용어 10개 출력 :',stop_words_list[:100])
02-05 정규 표현식(Regular Expression)
정규표현식 모듈 함수
정규표현식 모듈에서 지원하는 함수
모듈 함수 설명
re.compile() | 정규표현식을 컴파일하는 함수입니다. 다시 말해, 파이썬에게 전해주는 역할을 합니다. 찾고자 하는 패턴이 빈번한 경우에는 미리 컴파일해놓고 사용하면 속도와 편의성면에서 유리합니다. |
re.search() | 문자열 전체에 대해서 정규표현식과 매치되는지를 검색합니다. |
re.match() | 문자열의 처음이 정규표현식과 매치되는지를 검색합니다. search()가 정규 표현식 전체에 대해서 문자열이 매치하는지를 본다면, match()는 문자열의 첫 부분부터 정규 표현식과 매치하는지를 확인합니다. |
re.split() | 정규 표현식을 기준으로 문자열을 분리하여 리스트로 리턴합니다. |
re.findall() | 문자열에서 정규 표현식과 매치되는 모든 경우의 문자열을 찾아서 리스트로 리턴합니다. 만약, 매치되는 문자열이 없다면 빈 리스트가 리턴됩니다. |
re.finditer() | 문자열에서 정규 표현식과 매치되는 모든 경우의 문자열에 대한 이터레이터 객체를 리턴합니다. |
re.sub() | 문자열에서 정규 표현식과 일치하는 부분에 대해서 다른 문자열로 대체합니다. |
02-06 정수 인코딩(Integer Encoding)
위의 단계들이 전처리 단계였다면 여기서부터는 본격적으로 텍스트를 수치화 함.
텍스트를 숫자로 바꾸는 기법 중 첫 단계.
각 단어를 고유한 정수에 맵핑시키기
정수(인덱스)를 부여하는 방법은 여러가지가 있지만 보통은 단어 등장 빈도수를 기준으로 정렬함
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
raw_text = "A barber is a person. a barber is good person. a barber is huge person. he Knew A Secret! The Secret He Kept is huge secret. Huge secret. His barber kept his word. a barber kept his word. His barber kept his secret. But keeping and keeping such a huge secret to himself was driving the barber crazy. the barber went up a huge mountain."
# 문장 토큰화
sentences = sent_tokenize(raw_text)
print(sentences)
vocab = {}
preprocessed_sentences = []
stop_words = set(stopwords.words('english'))
for sentence in sentences:
# 단어 토큰화
tokenized_sentence = word_tokenize(sentence)
result = []
for word in tokenized_sentence:
word = word.lower() # 모든 단어를 소문자화하여 단어의 개수를 줄인다.
if word not in stop_words: # 단어 토큰화 된 결과에 대해서 불용어를 제거한다.
if len(word) > 2: # 단어 길이가 2이하인 경우에 대하여 추가로 단어를 제거한다.
result.append(word)
if word not in vocab:
vocab[word] = 0
vocab[word] += 1
preprocessed_sentences.append(result)
print(preprocessed_sentences)
좀 더 쉽게 하기 위해서 Counter, FreqDist, enumerate를 사용하거나, 케라스 토크나이저를 사용하는 것을 권장합니다.
문장토큰화→단어토큰화(소문자, 불용어, 길이 2이하 제거)→빈도수 리턴→빈도수 높은 순으로 정렬→높은순으로 1부터 부여→ 5번인덱스까지만 씀, 그 이상 인덱스 제거 →이 인덱스에 포함되지 않는 단어를 넣을 OOV라는 단어 추가 → 단어들 인덱스로 맵핑
이런 단계로 어마어마하게 돌아 돌아 가던 걸 Counter을 사용하면 한방에
from collections import Counter
all_words_list = sum(preprocessed_sentences, [])
print(all_words_list)
vocab = Counter(all_words_list)
print (vocab)
enumerate()는 순서가 있는 자료형(list, set, tuple, dictionary, string)을 입력으로 받아 인덱스를 순차적으로 함께 리턴한다는 특징
'혼자 공부중 > NLP' 카테고리의 다른 글
자연어 처리 / 텍스트 전처리 기법3 (패딩, 원핫인코딩, 데이터 분리) (0) | 2024.08.03 |
---|---|
텍스트 전처리 기법(정규화, 어간 추출, 표제어 추출) (0) | 2024.07.27 |
자연어 처리란? (+텍스트 전처리 기법들) (0) | 2024.07.27 |