텍스트 전처리
텍스트 전처리란 ?
- 데이터 분석 단계
(데이터 - 목표데이터 - 전처리된 데이터 - 변환된 데이터 - 패턴 - 지식)
컴퓨터가 텍스트를 이해할 수 있도록 하는 방법.
데이터 전처리 방법
토큰화
- 주어진 데이터를 토큰단위로 나눈 작업
- 토큰의 기준(어절, 단어, 형태소(의미를 가진 가장 작은 단위), 음절, 자소 등등.)
- Character-based, Word-based, Subword-based
고려사항
- 구두점이나 특수문자를 단순 제외
- 줄임말(we're -> we are)과 단어 내 띄어쓰기(rock n roll --한 단어임)
- 문장 토큰화 : 단순 마침표를 기준으로 자를 수 없음.
(서버에 들어가서 메일 결과 보내줘. 그러고나서 저녁먹자.) -> 이어지는 문장임.
한국어 토큰화의 어려움 --> 형태소 단위의 토큰화 필요
- 영어는 합성어(New york)이나 줄임말(He's)에 대한 예외처리만 하면 띄어쓰기의 토큰화가 잘 작동함.
- 하지만, 한국어는 조사가 존재하므로(그가, 그는, 그를, 그에게 등등.) 같은 단어임에도, 각기 다른 조사가 붙어 서로 다른 단어로 인식하게 됨.
- 추가로, 한국어는 띄어쓰기를 하지 않아도 의미가 전달이 됨.(ex, 이렇게해도한국어볼수있어요)
- 토큰화, morphs(형태소추출), pos(품사태깅), nouns(명사추출)
각 모듈(okt, kkma, komoran)마다 형태소 토큰화가 서로 다르게 작동 -> 성능 차이.
텍스트 정제
- 의미가 없는 부분의 텍스트, 노이즈를 제거하는 작업
- 특수문자, 아무 의미없는 글자, 혹은 분석하고자 할 목적에 적합하지 않은 단어
- 정규표현식, 파이썬 내장함수로 제거
- 불용어, 특수문자, 대-소문자 통합, 중복 문구 제거, 다중 공백 통일
불용어
- 분석에 큰 의미가 없는 단어, 실질적 의미를 갖지 않는 용어
- 전처리 시 불용어로 취급할 대상을 정의하는 작업이 필요함.
정규화
-
Stemming(어간추출)
실질적 의미의 단어만 추출하는 것. 단순하고, 빠르고
어형이 변형된 단어로부터 접사 등을 제거하여, 단어의 어간을 분리함.
포터 스태머 알고리즘
(formalize -> formal / allowance -> allow / ate, will eat -> eat)
- 어간, 단어의 의미를 담고 있는 단어의 핵심부분
- 접사, 단어에 추가적인 의미를 주는 부분
-
Lemmatization(표제어추출)
어원의 복원이 이루어짐. 정확하고, 느리고
품사 정보가 보존된 형태의 기본형으로 변환
cats -> cat(어간) + s(접사)
dies -> die
has -> have
편집거리 (Edit Distance)
1. Levenshtein distance(거리 낮을수록 유사 문자열)
- 하나의 string s1을 s2로 변환하는 최소 횟수를 두 string간의 거리,
- string변화하기 위한 3가지 분류 (delete, insert, substitution)
delete
- <점심을 먹자> -> <점심먹자>로 바꾸기 위해선 "을" 제거.
insert
- <점심먹자> -> <점심을 먹자>로 바뀌기 위해선 "을"삽입.
substitution
- <점심먹자> -> <점심먹장>로 바뀌기 위해선 "장"으로 치환.
정규표현식(Regex)
- 특정 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식언어.
- 원하는 규칙에 해당하는 문자(제거, 유지, 규칙에 맞는 문자열 반환)