텍스트를 바로 분석하거나, 임베딩을 할 수는 없다.
따라서, NLP는 사전에 텍스트를 가공하는 작업이 필요하다.
머신러닝 알고리즘이나 NLP API에 입력하기 위해, 텍스트 데이터를 클렌징, 토큰화, 어근화의 과정을 거치는 것을 텍스트 전처리 또는 텍스트 정규화라고 한다. (Text Preprocess, Text Normalization)
순서는 다음과 같다.
1) 클렌징
2) 토큰화
3) 필터링 및 스톱워드 제거
4) Stemming or Lemmatization
차례대로 간략하게 설명하도록 하겠다.
1. 클렌징
텍스트 분석에 불필요한 태그를 삭제하는 과정이다.
요즘 데이터는 대부분 크롤링을 해오기 때문에, html이나 xml태그를 삭제하는 과정이 이에 속한다.
beautifulsoup4이나 selenium을 통해 크롤링과 클렌징이 가능하다.
2. 텍스트 토큰화
<1> 문장 토큰화
문장의 마침표( . ), 개행문자 (\n) 등 문장의 마지막을 나타내는 기호에 따라 분리한다.
split( )함수를 사용하거나 정규표현식을 사용할 수도 있지만, nltk의 sent_tokenize를 사용하면 간단하게 실행할 수 있다.
<2> 단어 토큰화
공백, 콤마 ( , ), 마침표 ( . ), 개행문자 등으로 단어를 분리한다.
split( )함수를 사용하거나 정규표현식을 사용할 수도 있지만, nltk의 word_tokenize를 사용하면 간단하게 실행할 수 있다.
3. 스톱 워드 제거
스톱워드 (Stop Word)는 분석에 큰 의미가 없는 단어를 말한다.
영어에서는 I, You, is, the, a, will 등 문맥적으로 큰 의미가 없는 단어이다.
이러한 단어는 문법적인 요소기 때문에, 문장에서 사용빈도가 가장 높은 단어군이다.
만약 삭제해주지 않는다면 그 빈번함으로 인해 중요도가 높다고 판단될 수 있다.
따라서, 이러한 단어들을 제거해주는 것은 매우 중요하다.
nltk에서는 이러한 스톱워드 목록을 제공해준다.
앞에서 전처리하던 문장들로 해보자.
The, you, it 등의 단어들이 삭제되어 없어진 것을 볼 수 있다.
4. Stemming and Lemmatization
Stemming 과 Lemmatization 모두 단어의 어근을 찾는 방법이다.
하지만, stemming은 어근을 찾는 행위이다.
빠르고 간단하게 이뤄질 수 있다는 장점이 있지만, 정확도가 낮다는 단점이 있다. (일부 철자가 훼손되는 경우가 많다.)
예를 들면, cache라는 단어는 caching, cached, caches로 변형될 수 있는데, 이를 stemming하면 cach라는 단어로 변환한다.
간단하게 ing, ed, es등을 제거하기 때문에 발생한 단점이다.
Lemmatization은 문법적인 요소와 의미적인 요소를 반영하여 사전적인 원형을 추출한다.
Stemming에 비해 더 오랜 시간이 필요하지만, 더 높은 정확도를 보여준다.
caching, caches, caches를 cache로 변환한다.
NLTK에서 제공하는 stemmer는 Porter, Lancaster, Snowball 등이 있다.
Lemmatizer는 WordNetLemmatizer가 있다.
stemmer보다는 lemmatizer가 좀 더 정확함을 알 수 있다.
또한, 해당 단어의 품사가 무엇인지 명시해주면 더 정확한 분석이 가능함을 알 수 있다.
5. 요약
위의 그림과 같은 순서로 텍스트 전처리가 진행되게 된다.
이처럼 데이터의 전처리가 끝났다면, 다음부터는 본격적으로(?) 데이터분석을 진행해보도록 하겠다.
'Python > NLP(자연어처리)' 카테고리의 다른 글
3. khaiii 설치 및 사용법 (0) | 2020.09.03 |
---|---|
2. konlpy 사용법 (0) | 2020.09.02 |
1. 임베딩이란 (0) | 2020.09.01 |
BeautifulSoup4를 사용한 간단한 크롤러 만들기 (0) | 2020.04.15 |