풀고자 하는 문제의 특성, 언어/도메인/코퍼스의 특성에 따른 다른 형태의 전처리 전략이 필요하다.
기계적인 노이즈 제거 - 전각문자 변환 - Task에 따른 전형적인 노이즈 제거
Interactive 노이즈 제거 - 코퍼스 특성에 따른 노이즈 제거 - 작업자가 상황을 확인하며 작업 수행
▮ 기계적인 노이즈 제거
전각문자 제거
전각문자란 하나의 글자가 정사각형을 이루는 경우를 말한다.
https://angelplayer.tistory.com/95
반각문자는 전각문자의 가로폭을 반으로 줄인 문자를 말한다.
왼쪽이 전각, 오른쪽이 반각
유니코드 상에서 숫자 또는 문자가 전각일 경우에는 제대로 인식을 못할 가능성이 크다.
'1'이라는 숫자가 전각일 경우에는 숫자가 아닌 일반 문자로 인식할 수 있기 때문이다.
그렇기 때문에 반각/전각 문자로 혼용되는 특수문자 또는 영문, 숫자 등은 반각문자로 바꾸어주는 작업이 필요하다.
▮ Interactive 노이즈 제거
직접 노이즈를 확인하고 규칙을 찾아서 RegEX를 구현하고 RegEx를 적용하는 끝이 없는 과정이다.
또한 규칙에 의해 노이즈를 제거하기 때문에 노이즈를 전부 제거하기는 어렵다.
정규식(Regular expression)을 활용한 정제
복잡한 규칙의 노이즈도 제거/치환 가능
코딩 없이 단순한 텍스트 에디터도 가능 : Sublime Text3, VSCode 등
정규 표현식의 기초, 메타 문자
• [ ] : "[ ] 사이의 문자들과 매치"
[ ] : [2345cde] → 2,3,4,5,c,d,e 중의 character
[-] : [2-4c-e] → 2,3,4와 cde 중의 character
[^] : [^2-5c-e] → 2,3,4,5와 c,d,e를 제외한 모든 character
• ( )
(x)(yz) → x를 첫번째 변수"\1"로 지정, yz를 두번째 변수"\2"에 지정
활용 예시) 양 끝에 알파벳으로 둘러싸인 'bc'를 제거
([a-z])bc([a-z]) → \1\2
abcd → ad
0bc1 → 0bc1
• |
(x|y) : x 또는 y가 나타남. 그리고 " \1"에 지정
• ?
x? : x가 0번 또는 1번 나타남
• +
x+ : x가 한번 이상 나타남
• *
x* : x가 나타나지 않을 수도, 반복될 수도 있음
• {n}
x*{n} : n번 반복
[0-9]{4} : 숫자가 4번 반복
[0-9]{4}\-[0-9]{4} : 전화번호
• {n, }
x{n, } : n번 이상 반복
• {n, m}
x{n, m} : n번 부터 m번까지 반복
• .
.{9} : any character가 9개
.+ : 어떤 character가 한번 이상 나타남
• ^$ :"문장의 시작과 끝을 표시"
^[0-9]{4}\-[0-9]{4}\-[0-9]{4}\-[0-9]{4}$ : 딱 카드번호로만 구성되어 있는 것을 확인
• \s:"공백문자" • \S:"공백문자를 제외한 모든 문자" • \w:"알파벳 + 숫자 + _" ([A-Za-z0-9_])와 동일 • \w:"알파벳 + 숫자 + _ 제외한 문자" ([^A-Za-z0-9_])와 동일 • \d:"숫자" ([0-9])와 동일 • \D:"숫자를 제외한 모든 문자" ([^0-9])와 동일
VS Code상에서 ctrl+f4로 interactive하게 정규표현식을 사용하여 데이터를 정제할 수 있다.