코퍼스에서 용도에 맞게 토큰을 분류하는 작업을 토큰화(tokenization)라고 하며, 토큰화 작업 전, 후에는 텍스트 데이터를 용도에 맞게 정제(cleaning) 및 정규화(normalization)하는 일을 행 하여야한다.

 

정제 및 정규화의 목적은 다음과 같다.

  • 정제(cleaning) : 갖고 있는 코퍼스로부터 노이즈 데이터를 제거한다.
  • 정규화(normalization) : 표현 방법이 다른 단어들을 통합시켜서 같은 단어로 만들어준다.

정제 작업은 토큰화 작업 전후에 방해가 되는 부분을 배제 시키기 위해 지속적으로 이루어 지기도 한다.

1. 규칙에 기반한 표기가 다른 단어들의 통합

필요에 따라 정의할 수 있는 정규화 규칙의 예로서 같은 의미를 갖고 있음에도, 표기가 다른 단어들을 하나의 단어로 정규화하는 방법이 있다.

 

가령, USA와 US는 같은 의미를 가지므로, 하나의 단어로 정규화 할 수 있다.

이러한 정규화를 거치면, US를 찾아도 USA도 함께 찾을 수 있을 것이다.

2. 대, 소문자 통합

영어권 언어에서 대, 소문자를 통합하는 것은 단어의 개수를 줄일 수 있는 또 다른 정규화 방법이다.

소문자 통합 작업은 대부분 대문자를 소문자로 변환하는 소문자 변환 작업을 이루어 진다.

 

물론, 대문자와 소문자를 무작정 통햅해서도 안 된다. 대문자와 소문자가 구분되어야 하는 경우도 있기 때문이다.

가령, 미국을 뜻하는 단어 US와 우리를 뜻하는 us는 구분되어야 하기 때문이다.

또 회사 이름(General Motors)나, 사람 이름(Bush)등은 대문자로 유지 되는 것이 옳다.

 

이때는 모든 토큰을 소문자로 만드는 것이 아니라 일부만 소문자로 변환시키는 방법을 사용하면 된다,

가령, 문장의 맨 앞에 나오는 단어의 대문자만 소문자로 바꾸고, 다른 단어들은 전부 대문자인 상태로 놔두는 것이다.

3. 불필요한 단어의 제거(Removing Unnecessary Words)

정제 작업에서 제거해야하는 노이즈 데이터(noise data)는 자연어가 아니면서 아무 의미도 갖지 않는 글자들(특수 문자 등)을 의미하기도 하지만, 분석하고자 하는 목적에 맞지 않는 불필요 단어들을 노이즈 데이터라고 하기도 한다.

3-1) 등장 빈도가 적은 단어(Removing Rare words)

때론 텍스트 데이터에서 너무 적게 등장해서 자연어 처리에 도움이 되지 않는 단어들이 존재 한다.

예를 들어 입력된 메일이 정상 메일인지 스팸 메일인지를 분류하는 스팸 메일 분류기를 설계한다고 가정해본다.

총 100,000개의 메일을 가지고 정상 메일에서는 어떤 단어들이 주로 등장하고, 스팸 메일에서는 어떤 단어들이 주로 등장하는지를 가지고 설계하고자 한다. 이때 100,000개의 메일 데이터에서 총 합 5번 밖에 등장하지 않은 단어가 있다면 이 단어는 직관적으로 분류에 거의 도움이 되지 않을 것임을 알 수 있다.

3-2) 길이가 짧은 단어(Removing words with very a short length)

영어권 언어에서는 길이가 짧은 단어를 삭제하는 것만으로도 어느정도 자연어 처리에서 크게 의미가 없는 단어들을 제거하는 효과를 볼 수 있다고 알려져 있다.

 

사실 길이가 짧은 단어를 제거하는 이유는 길이를 조건으로 텍스트를 삭제하면서 단어가 아닌 구두점들까지도 한꺼번에 제거하기 위함도 있다.

하지만 한국어에서는 길이가 짧은 단어라고 해도 삭제하는 방법은 크게 유효하지 않을 수 있다.

영어 단어의 길이가 한국어 단어의 길이보다는 평균적을 길다는 점을 알 수 있다.

 

이는 영어 단어와 한국어 단어에서 각 한 글자가 가진 의미의 크기가 다르다는 점을 알 수 있다.

예를 들어 '학교'라는 한국어 단어를 보면 배울 학(學)과 학교 교(校)로 글자 하나, 하나가 이미 함축적인 의미를 갖고있어 두 글자만으로 학교라는 단어를 표현이 가능 하다.

하지만 영어의 경우 에는 s, c, h, o, o, l이라는 총 6개의 글자가 필요하다.

 

이러한 특성으로 인해 영어는 길이가 2~3 이하인 단어를 제거하는 것만으로도 크게 의미를 갖지 못하는 단어를 줄이는 효과를 가질 수 있다.

예를 들어 길이가 1인 단어를 제거하는 코드를 수행하면 의미를 갖지 못하는 단어인 관사 'a'와 주어로 쓰이는 'i'가 제거 된다. 마찬가지로 2인 단어를 제거하면 it, at, to, on, in, by등과 같은 대부분 불요어에 해당되는 단어들이 제거 된다.

# 길이가 1~2인 단어들을 정규 표현식을 이용하여 삭제
import re
text = "I was wondering if anyone out there could enlighten me on this car."
shortword = re.compile(r'\W*\b\w{1,2}\b')
print(shortword.sub('', text))
was wondering anyone out there could enlighten this car.

4. 정규 표현식(Regular Expression)

얻어낸 코퍼스에서 노이즈 데임터의 특징을 잡아낼 수 있다면, 정규 표현식을 통해서 이를 제거할 수 있는 경우가 많다.

정규 표현식은 코퍼스 내에 계속해서 등장하는 글자들을 규칙에 기반하여 한 번에 제거하는 방식으로서 매우 유용하다.

 

* 정리: 

1. 정제(cleaning) : 갖고 있는 코퍼스로부터 노이즈 데이터를 제거한다.

2. 정규화(normalization) : 표현 방법이 다른 단어들을 통합시켜서 같은 단어로 만들어준다.

3. 정제 작업은 토큰화 작업 전,후에 지속적으로 이루어 진다.

4. 영어권 에서는 대, 소문자를 통합하는 정규화 방법을 사용할 수 있다.

5. 등장 빈도가 적은 단어, 길이가 짧은 단어를 규칙으로 불필요한 단어를 제거할 수 있다.

6. 한국어는 단어의 평균길이도 짧고 의미가 있는 글자라 길이가 짧은 단어를 제거 하기 힘들다.

7. 코퍼스에서 노이즈 데이터의 특징을 잡아낼 수 있다면, 정규표현식을 통해서 이를 제거할 수 있다.