티스토리 뷰
[자연어처리] re
HAN_PY 2020. 11. 23. 15:020. 들어가면서
re은 파이썬 정규 표현식(Regular Expression)의 라이브러리다. 따라서 내장 라이브러리로 별다른 설치 없이 바로 사용 가능하다. re은 문자열을 쉽게 다룰 수 있기 때문에 문자열 데이터를 다루는 자연어 처리 분야에서 많이 사용된다. 당연하게도 전처리 과정에서 많이 사용한다.
아래의 블로그는 최소한의 간단한 예를 적은 것이다. 좀 더 자세한 설명과 많은 예제를 찾기 위해서는 아래의 정규식을 눌러보자.
1. 정규 표현식(Regular Expression)
re을 들어가기 전에 기본적으로 파이썬 정규 표현식에서 사용하는 문자나 기호에 대해 알아보자.
. | 줄 바꿈을 제외한 모든 문자 |
^ | 문자열의 시작 |
$ | 문자열의 끝 |
* | 앞에 있는 문자가 0회 이상 반복된 문자열 |
+ | 앞에 있는 문자가 1회 이상 반복된 문자열 |
{m} | 앞 문자를 m회 반복하는 문자열 |
{m, n} | 앞 문자를 m~n회 반목하는 문자열 |
? | 앞 문자가 나오거나 나오지 않는 문자열({0,1}과 동일) |
\d | 숫자 |
\D | 숫자가 아닌 문자 |
\w | 문자 혹은 숫자 |
\W | 문자 혹은 숫자가 아닌 것 |
(...) | 괄호 안의 모든 정규 표현식을 만족하는 문자 |
[abc] | a, b, c 중 한 개의 문자와 일치 |
2. re 함수
이제 자연어 처리에 주로 사용되는 re라이브러리의 함수 위주로 알아보자. 일단 import를 하자.
import re
2.1. re.compile( pattern )
compile 함수는 특정 기호를 정규 표현식 객체로 만들어 준다. re 라이브러리를 사용하려면 정규 표현식 패턴을 매번 작성해야 하지만, compile을 사용하면 패턴을 필요할 때마다 사용할 수 있다.
pattern = '\W+'
re_pattern = re.compile(pattern)
2.2. re.search( pattern, string )
search 함수는 해당 문자열에서 정규 표현식에 해당하는 첫 부분을 찾는다.
re.search( "(\w+)", "wow, i love it!" )
----------------------------------------
<_sre.SRE_Match object; span=(0, 3), match='wow'>
"(\w+)"라는 패턴을 찾는 과정이다. 띄어쓰기가 나오기 전이고 문자인 'wow'가 결괏값으로 나오는 것을 알 수 있다.
2.3. re.split( pattern, string )
split 함수는 해당 문자열에서 특정 패턴으로 문자열을 나눠서 리스트로 만든다.
re.split('\W', 'wow, it is world of word')
-------------------------------------------
['wow', '', 'it', 'is', 'world', 'of', 'word']
'\W'란 문자나 숫자가 아닌 것을 의미하므로 공백을 기준으로 문장이 나눠진 것을 확인할 수 있다.
2.4 re.sub( pattern, repl, string )
sub 함수는 문자열(string)에서 특정 패턴(pattern)을 만족시키면 정의해둔 repl 값으로 치환된다.
re.sub("\d", "number", "7 candy")
----------------------------------
'number candy'
"\d"는 숫자를 의미하고 "7 candy"에 숫자가 포함되어 있기 때문에 7이 repl 값인 number로 변경이 된 것을 확인할 수 있다.
3. 마무리
사실, 모르고 코드를 보는 도중에 re을 처음 만나면 굉장히 어렵게 느껴진다. 하지만 가장 기본적인 것들을 이해하고 넘어가면 앞으로 코드를 볼 때 훨씬 수월할 것이라 확신한다.
'인공지능(Artificial Intelligence) > 자연어 처리(natural language processing)' 카테고리의 다른 글
[자연어처리] 한국어 토큰화 구현(KoNLPy) (0) | 2020.12.01 |
---|---|
[자연어처리] one-hot encoding 구현 (0) | 2020.11.29 |
[자연어처리] 판다스(Pandas) (0) | 2020.11.21 |
[자연어처리] 사이킷런(scikit-learn) (0) | 2020.11.19 |
[자연어처리] Preprocessing(전처리) 종류 (0) | 2020.11.11 |
- Total
- Today
- Yesterday
- Python
- BFS
- vuejs
- Deque
- 자료구조
- UserCreationForm
- 클라우데라
- next.config.js
- login
- 자연어처리
- Vue
- nodejs
- Queue
- useHistory 안됨
- useState
- react autoFocus
- NextJS
- typescript
- read_csv
- DFS
- django
- pandas
- nextjs autoFocus
- error:0308010C:digital envelope routines::unsupported
- react
- JavaScript
- mongoDB
- logout
- Express
- TensorFlow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |