텍스트 전처리에서 정규 표현식은 아주 유용한 도구입니다. 이번에는 정규 표현식 모듈 re의 사용 방법 & NLTK를 통한 정규 표현식을 이용한 토큰화에 대해서 알아보자.

 

기본적으로 re 모듈에 대한 복습시간이 될 것 같다.

 

1) 정규 표현식 문법

정규 표현을 위해 사용되는 문법 중 특수 문자들은 아래와 같다.

또한, 정규 표현식 문법에는 백슬래쉬를 ( \ ) 이용해서 쓰이는 문자 규칙 또한 존재한다.

2) 정규표현식 모듈 함수

정규표현식 모듈에서 지원하는 함수는 아래와 같다.

 

실습

 

#1 " . "

실습#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의 결과와는 달리 아포스트로피나 온점을 제외하지 않고 토큰화가 수행된 것을 확인할 수 있다.

 

+ Recent posts