텍스트 전처리에서 정규 표현식은 아주 유용한 도구입니다. 이번에는 정규 표현식 모듈 re의 사용 방법 & NLTK를 통한 정규 표현식을 이용한 토큰화에 대해서 알아보자.
기본적으로 re 모듈에 대한 복습시간이 될 것 같다.
1) 정규 표현식 문법
정규 표현을 위해 사용되는 문법 중 특수 문자들은 아래와 같다.
또한, 정규 표현식 문법에는 백슬래쉬를 ( \ ) 이용해서 쓰이는 문자 규칙 또한 존재한다.
2) 정규표현식 모듈 함수
정규표현식 모듈에서 지원하는 함수는 아래와 같다.
실습
#1 " . "
.(점) 은 한 개의 임의의 문자를 나타다. 예를 들어서 정규 표현식이 a.c라고 합시다. a와 c 사이에는 어떤 1개의 문자라도 올 수 있습니다. akc, azc, avc, a5c, a!c와 같은 형태는 모두 a.c의 정규 표현식과 매치된다고 할 수 있다.
#2 " ? " 기호
?는 ?앞의 문자가 있을 수도, 없을 수도 있는 경우를 말한다. ex) ab?c -> 물음표(?) 앞의 "b"는 슈뢰딩거의 고양이마냥 있을수도, 없을 수 도 있는 것이다. 따라서 abc, ac 모두 가능하다.
#3 " * " 기호
*은 바로 앞의 문자가 0개 이상일 경우를 나타낸다. 앞의 문자는 존재하지 않을 수도 있으며, 또는 여러 개일 수도 있는 것이다. 만약 정규 표현식이 ab*c라면 ac, abc, abbc, abbbc 등과 매치할 수 있으며 b의 개수는 무수히 많을 수 있다.
?기호에서 존재하는 개수의 제한이 없다는 점이 추가되었다고 볼 수 있다.!
#4 " + " 기호
" + " 기호는 " * " 기호와 유사하다고도 볼 수 있다.
다른 점은 앞의 문자가 최소 1개 이상이어야 한다는 점. 정규 표현식이 ab+c라고 한다면 ac는 해당 X.
하지만 abc, abbc, abbbc 등과 매치할 수 있으며 b의 개수는 무수히 많을 수 있습니다.
#4 " ^ " 기호
^는 시작되는 문자열을 지정한다.
정규표현식이 ^ab라면 문자열 ab로 시작되는 경우 매치.
기타) 자주쓰이는 함수 실습
1) re.split()
파이썬 내장함수인 split메소드와 매우 유사하다.
예제1)
위 방법 말고도, 줄바꿈이나 다른 정규표현을 기준으로 텍스트를 분리할 수 도 있다.
예제2)
2) re.findall()
findall() 메소드는 정규 표현식과 매치되는 모든 문자열들을 리스트로 리턴한다.
단, 매치되는 문자열이 없다면 빈 리스트를 리턴.
임의의 텍스트에 정규 표현식으로 숫자를 의미하는 규칙으로, 전체 텍스트로부터 숫자만 찾아내서 리스트로 리턴.
3) re.sub()
sub() 함수는 정규 표현식 패턴과 일치하는 문자열을 찾아 다른 문자열로 대체할 수 있습니다. 아래와 같은 정제 작업에 많이 사용되는데, 영어 문장에 각주 등과 같은 이유로 특수 문자가 섞여있는 경우에 특수 문자를 제거하고 싶다면 알파벳 외의 문자는 공백으로 처리하는 등의 용도로 쓸 수 있습니다.
2. 정규 표현식을 이용한 토큰화
RegexpTokenizer()에서 괄호 안에 하나의 토큰으로 규정하기를 원하는 정규 표현식을 넣어서 토큰화를 수행한다. tokenizer1에 사용한 \w+는 문자 또는 숫자가 1개 이상인 경우를 의미.
tokenizer2에서는 공백을 기준으로 토큰화하도록 진행. gaps=true는 해당 정규 표현식을 토큰으로 나누기 위한 기준으로 사용한다는 의미. 만약 gaps=True라는 부분을 기재하지 않는다면, 토큰화의 결과는 공백들만 나오게 된다. tokenizer2의 결과는 위의 tokenizer1의 결과와는 달리 아포스트로피나 온점을 제외하지 않고 토큰화가 수행된 것을 확인할 수 있다.
'딥 러닝 > 자연어처리 - 텍스트 전처리' 카테고리의 다른 글
(RNN) 시퀀스-투-시퀀스(seq2seq) (2) | 2024.07.13 |
---|---|
6. 정수 인코딩(Integer Encoding) (0) | 2024.03.09 |
정규 표현식 (Regular Expression) (0) | 2024.03.09 |
4. 불용어 처리 (Stopword) (0) | 2024.03.09 |
3. 어간 추출(Stemming) 및 표제어 추출(Lemmatization) (3) | 2024.03.08 |