본문 바로가기

[NLP]

[NLP] 정규 표현식(Regular Expression)

텍스트 전처리에서 정규 표현식은 아주 유용한 도구입니다.

정규 표현식 모듈 re와 NLTK를 통한 정규 표현식을 이용한 토큰화에 대해 설명하겠습니다.

 

1. 정규 표현식 문법과 모듈 함수

 

1) 정규 표현식 문법

 

특수 문자 설명
. 한 개의 임의의 문자를 나타냅니다. (줄바꿈 문자인 \n는 제외)
? 앞의 문자가 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 또는 1개)
* 앞의 문자가 무한개로 존재할 수도 있고, 존재하지 않을 수도 있습니다. (문자가 0개 이상)
+ 앞의 문자가 최소 한 개 이상 존재합니다. (문자가 1개 이상)
^ 뒤의 문자열로 문자열이 시작됩니다.
$ 앞의 문자열로 문자열이 끝납니다.
{숫자} 숫자만큼 반복합니다.
{숫자1, 숫자2} 숫자1 이상 숫자2 이하만큼 반복합니다. ?, *, +를 이것으로 대체할 수 있습니다.
{숫자,} 숫자 이상만큼 반복합니다.
[ ] 대괄호 안의 문자들 중 한 개의 문자와 매치합니다. 
[amk]라고 한다면 a 또는 m 또는 k 중 하나라도 존재하면 매치를 의미합니다. 
[a-z]와 같이 범위를 지정할 수도 있습니다. 
[a-zA-Z]는 알파벳 전체를 의미하는 범위이며, 문자열에 알파벳이 존재하면 매치를 의미합니다.
[^문자] 해당 문자를 제외한 문자를 매치합니다.
l AlB와 같이 쓰이며 A 또는 B의 의미를 가집니다.

 

정규 표현식 문법에는 역 슬래쉬(\)를 이용하여 자주 쓰이는 문자 규칙들이 있습니다.

문자 규칙 설명
\\\ 역 슬래쉬 문자 자체를 의미합니다
\\d 모든 숫자를 의미합니다. [0-9]와 의미가 동일합니다.
\\D 숫자를 제외한 모든 문자를 의미합니다. [^0-9]와 의미가 동일합니다.
\\s 공백을 의미합니다. [ \t\n\r\f\v]와 의미가 동일합니다.
\\S 공백을 제외한 문자를 의미합니다. [^ \t\n\r\f\v]와 의미가 동일합니다.
\\w 문자 또는 숫자를 의미합니다. [a-zA-Z0-9]와 의미가 동일합니다.
\\W 문자 또는 숫자가 아닌 문자를 의미합니다. [^a-zA-Z0-9]와 의미가 동일합니다.

 

2) 정규 표현식 모듈 함수

 

정규표현식 모듈에서 지원하는 함수는 이와 같습니다.

모듈 함수 설명
re.compile() 정규표현식을 컴파일하는 함수입니다. 다시 말해, 파이썬에게 전해주는 역할을 합니다. 찾고자 하는 패턴이 빈번한 경우에는 미리 컴파일해놓고 사용하면 속도와 편의성면에서 유리합니다.
re.search() 문자열 전체에 대해서 정규표현식과 매치되는지를 검색합니다.
re.match() 문자열의 처음이 정규표현식과 매치되는지를 검색합니다.
re.split() 정규 표현식을 기준으로 문자열을 분리하여 리스트로 리턴합니다.
re.findall() 문자열에서 정규 표현식과 매치되는 모든 경우의 문자열을 찾아서 리스트로 리턴합니다. 만약, 매치되는 문자열이 없다면 빈 리스트가 리턴됩니다.
re.finditer() 문자열에서 정규 표현식과 매치되는 모든 경우의 문자열에 대한 이터레이터 객체를 리턴합니다.
re.sub() 문자열에서 정규 표현식과 일치하는 부분에 대해서 다른 문자열로 대체합니다.

 

2. 정규 표현식을 이용한 토큰화

 

NLTK에서는

정규 표현식을 사용해서 단어 토큰화를 수행하는 RegexpTokenizer를 지원합니다.

토큰으로 규정하기를 원하는 정규 표현식을 넣어서 토큰화를 수행합니다.

 

 

 

 

 

'[NLP]' 카테고리의 다른 글

[NLP] 패딩(padding)  (0) 2023.03.27
[NLP] 정수 인코딩  (0) 2023.03.27
[NLP] 표제어 추출 and 어간 추출  (0) 2023.03.27
[NLP] 불용어(Stopword)  (0) 2023.03.27
[NLP] 정제 및 정규화  (0) 2023.03.27