글 참조 :https://wikidocs.net/21703

 

02-05 정규 표현식(Regular Expression)

텍스트 전처리에서 정규 표현식은 아주 유용한 도구입니다. 이번에는 파이썬에서 지원하고 있는 정규 표현식 모듈 re의 사용 방법과 NLTK를 통한 정규 표현식을 이용한 토큰화에 대…

wikidocs.net

 

텍스트 전처리에서 정규 표현식은 아주 유용한 도구입니다. 이번에는 정규 표현식 모듈 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