-
텍스트 사전 준비 작업( 텍스트 전처리 ) - 텍스트 정규화Python Machine Learning/텍스트 분석 2020. 11. 14. 17:25
텍스트 정규화
: 텍스트를 머신러닝 알고리즘이나 NLP 애플리케이션에 입력 데이터로 사용하기 위해 클렌징,
정제, 토큰화, 어근화등의 다양한 텍스트 데이터의 사전 작업을 수행하는 것을 의미.
텍스트 정규화 작업은 다음과 같이 분류
- 클렌징( cleansing )
- 토큰화( tokenization )
- 필터링/스톱 워드 제거/철자 수정
- Stemming
- Lemmatization
( 텍스트 정규화 작업은 NLTK 패키지를 이용해 실습 )
클렌징
: 텍스트 분석에 방해가 되는 불필요한 문자, 기호등을 사전에 제거하는 작업 ( HTML, XML 태그, 특정 기호 )
텍스트 토큰화
: 문서에서 문장을 분리하는 문장 토큰화
: 문장에서 단어를 토큰으로 분리하는 단어 토큰화
문장 토큰화
: 문장의 마침표, 개행문자( |n )등 문장의 마지막을 똣하는 기호에 따라 분리하는 것이 일반적
sent_tokenize( ) 패키지 사용 => sent_tokenize( )가 반환하는 것은 각각의 문장으로 구성된 list 객체로, 반환된 객체가 3개의 문장으로 된 문자열을 가지고 있는 것을 알 수 있음.
단어 토큰화
: 기본적으로 공백, 콤마, 마침표등으로 분리하지만, 정규 표현식을 이용해 다양한 유형으로 토큰화 수행
word_tokenize( ) 패키지 사용 => word_tokenize( )를 통해 문장이 15개의 단어로 이루어진 문자열이라는 것을 알 수 있음.
sent_tokenize와 word_tokenize를 조합해 문서를 개별 문장으로 나누고 다시 단어로 토큰화 하는 tokenize_text( ) 함수 생성 => 3개 문장르 문장별로 토큰화하여 word_tokens 변수는 3개의 리스트 객체를 내포하는 리스트이며, 이러한 개별 리스트 객체는 각각 문장별로 토큰화된 단어를 요소로 가지고 있음.
이러한 문장을 단어별로 토큰화 할 경우 문맥의 의미가 무시되는데 이럴 경우 n-gram을 사용해 최소화
예를 들어 "Agent Smith knocks the door"를 2-gram으로 만들면 ( Agent, Smith ), ( Smith, Knocks ), ( Knocks, the )와 같이 연속적으로 2개의 단어들을 순차적으로 이동하면서 단어들을 토큰화함.
스톱 워드 제거
: 영어에서 is, the, a, will 처럼 문법적인 요소로는 중요하지만 분석하는데 있어서는 큰 의미가 없는 단어를 제거하는 것을 말함. 사전에 제거하지않는다면 빈번함으로 인해 중요한 단어로 인지될 수 있기에 제거 해야함.
- NTLK에서는 편의를 위해 다양한 언어의 스톱 워드를 제공
최초 한번 시행하며, NTLK의 stopwords 목록을 내려받아야함 NTLK의 영어의 경우 몇 개의 stopword가 있는지 알아보고 그중 20개 확인. 3개의 문장별로 단어를 토큰화해 생성된 word_tokens 리스트에 대해 stopwords를 필터링으로 제거해 분석에 필요한 단어만 추출 => is, this와 같은 stopword가 필터링을 통해 제거됐음을 알 수 있음.
Stemming과 Lemmatization
: 영어의 경우 같은 단어라도 과거/현재, 3인치 단수 여부, 진행형등 매우 많은 조건에 따라 다양하게 변하는데,
문법적 또는 의미적으로 변화하는 단어의 원형을 찾아주는 역할을 함
Lemmatization이 Stemming보다 품사와 같은 문법적인 요소와 더 의미적인 부분을 감안해 정확한 철자로 된 어근을 찾아주지만 변환에 더 오랜시간을 필요로 함
LTLK에서는 Stemming을 위해 stemmer ( Porter, Lancaster, Snowball )를 제공하며, Lemmatization을 위해서 WordNetLemmatizer를 제공
NLTK의 LancasterStemmer를 이용, Stemmer 객체 생성뒤 stem('단어') 메서드를 호출하면 원하는 '단어'의 Stemming이 가능 => 형용사인 happy, fancy의 경우 비교형, 최상급형으로 변형된 단어의 정확한 원형을 찾지못함
WordNetLemmatizer를 이용, 더 정확한 원형 단어 추출을 위해 '품사'를 입력해야함, 동사( v ), 형용사 ( a ) => stemmer보다 정확하게 원형 단어를 추출
'Python Machine Learning > 텍스트 분석' 카테고리의 다른 글
감성 분석 - IMDB 영화평 (0) 2020.12.24 텍스트 분류 실습 - 뉴스그룹 분류(2) (0) 2020.12.23 텍스트 분류 실습 - 뉴스그룹 분류 (0) 2020.11.27 Bag of Words - BOW (0) 2020.11.14 텍스트 분석 (0) 2020.10.20