머신러닝 & 딥러닝/자연어처리

[자연어 처리/NLP기초] 3. 말뭉치와 말뭉치 전처리하기

by seokii 2022. 2. 19.
728x90
반응형

시소러스와 WordNet

https://seokii.tistory.com/89?category=1037863 

 

[자연어 처리/NLP기초] 2. 단어 이해시키기(1) - 시소러스와 WordNet

자연어 처리란 https://seokii.tistory.com/77 [자연어 처리/NLP기초] 1. 자연어 처리란? 자연어 처리를 공부하면서 기초적인 내용을 정리하고자 글을 쓰게 되었습니다. '밑바닥부터 시작하는 딥러닝2' 교

seokii.tistory.com

지난 글에서 컴퓨터에게 단어를 가르치기 위해서 시소러스와 WordNet을 정리했습니다.

이번에는 통계 기반 기법으로 단어를 가르치기 전에 말뭉치와 말뭉치를 전처리하는 것에 대해 정리하겠습니다.

 

말뭉치(Corpus)란?

말뭉치는 자연어처리 작업에서 의미하는 텍스트 데이터입니다.

일반적으로 원시 텍스트와 함께 연관된 메타데이터를 포함합니다.

간단하게 말하자면, 대량의 텍스트 데이터 혹은 자연어 처리를 진행하기 위해 수집된 텍스트 데이터라고 쉽게 이해할 수 있습니다.

 

말뭉치 전처리하기

text = 'You say goodbye and I say hello.'
text = text.lower()
text = text.replace('.', ' .')
print(text)

words = text.split(' ')
print(words)
you say goodbye and i say hello .
['you', 'say', 'goodbye', 'and', 'i', 'say', 'hello', '.']

.lower() 함수를 사용해 모든 문자를 소문자 처리를 진행했습니다.

.replace()로 구두점 앞에 공백을 추가했습니다.

그 이후 .split() 함수를 사용해 공백을 기준으로 모든 단어들을 분할했습니다.

 

이 작업을 토크나이징(tokenizing)이라하며 자연어 처리에서 이 작업을 편하게 도와주는 라이브러리들이 존재합니다. 한국어의 경우에는 KoNLPy를 활용해 쉽게 작업을 진행할 수 있습니다.

https://seokii.tistory.com/28

 

NLP 기초 - KoNLPy를 활용한 한국어 형태소 토크나이징(Komoran, Kkma, Okt)

토크나이징(tokenizing) 일반적으로, 자연어 처리를 하기 위해서는 문장을 일정 의미를 지닌 작은 단어들로 나누어야 합니다. 가장 기본이 되는 단어를 토큰(token)이라 합니다. 말뭉치(혹은 문장)가

seokii.tistory.com

 

word_to_id = {}
id_to_word = {}

for word in words:
    if word not in word_to_id:
        new_id = len(word_to_id)
        word_to_id[word] = new_id
        id_to_word[new_id] = word

print(id_to_word)
print(word_to_id)
print(id_to_word[1])
print(word_to_id['hello'])
{0: 'you', 1: 'say', 2: 'goodbye', 3: 'and', 4: 'i', 5: 'hello', 6: '.'}
{'you': 0, 'say': 1, 'goodbye': 2, 'and': 3, 'i': 4, 'hello': 5, '.': 6}
say
5

다음으로, 딕셔너리를 선언해 id와 word를 정의해주었습니다.

문장의 순서대로 0: 'you', 1: 'say' ... 6: '.' 와 같은 형식입니다.

이 딕셔너리를 사용해 단어를 가지고 id를 검색하거나, 반대의 경우에도 검색할 수 있습니다.

 

말뭉치를 가지고 기본적인 전처리를 해봤는데,

다음 글에서는 이 말뭉치를 더 활용해 통계 기반 기법으로 단어를 학습시켜보도록 하겠습니다.

 

 

728x90
반응형

댓글