[자연어처리]Regular expression

Jae Gyeong Lee·2022년 9월 13일
0

1. 개요

replace함수를 통해 원하지 않는 character를 지워줄 수 있다. 하지만, replace함수의 단점은 뭘 제거해야 하는지 하나 하나 알아야 한다는 단점이 있다. 정규표현식을 사용해서, 원하지 않는 character를 지워줄 수 있다.

정규표현식(Regular expressions)

  • 어떠한 문자열 값에 대한 패턴.
  • 정규식을 이용해서 기호에 대한 패턴을 만들 수 있음.
    - 패턴을 만족하는 문자열 기호를 아무것도 포함하지 않는 문자열 값('')을 이용해서 기호를 다 삭제할 수 있음.
re.sub('[^\s\d\w]','',text)

sub = substitute(대체하다)
^ = 부정의 의미가 있다.
\s = 공백을 의미(space).
\d = 숫자를 의미(digit).
\w = 문자를 의미(word).

=> ^\s\d\w는 공백도 아니고 숫자도 아니고 문자도 아닌 character를 의미.

첫번째 인자: 대체하고자 하는(없애고자 하는) 문자열 값의 패턴. (여기서는 기호를 의미)
두번째 인자: 새롭게 넣고자 하는 문자열 값의 패턴.
세번째 인자: 대체 작업을 하고자 하는 텍스트 데이터의 변수명

=> 첫번째 인자에 해당하는 character를 두번째 인자에 해당하는 character로 전부 교체한다.

2. 정규표현식 생성 방식

2.1. re.compile()을 사용하여 패턴 탐색.

  • 장점: 패턴 객체를 만들어서 반복적으로 사용할 수 있기 떄문에 찾고자 하는 패턴이 빈번한 경우, compile을 활용하면, 보다 편리하게 regex를 사용할 수 있음.
p = re.compile('[ a-z]+')  #패턴을 미리 compile해둠.
p_m = p.match('python')    #compile한 패턴을 통해, 문자를 탐색.

2.2. re.compile()을 생략하고 패턴 탐색.

re.match('[ a-z]+', 'python')  #complie 없이, 바로 패턴을 통해 문자를 탐색.

https://stackoverflow.com/questions/452104/is-it-worth-using-pythons-re-compile
https://buyandpray.tistory.com/49

3. 정규표현식 meta 문자

3.1. 메타코드 정리

https://doorbw.tistory.com/127

3.2. Raw String(r)

  • Raw string(r)은 백슬래시()를 텍스트 그 자체로 인식하게 함.
re.compile('\\\\section')  ==  re.compile(r'\\section')

re.compile(r'(\d+)')  ==  re.compile('(\\d+)') 

=> Raw string을 활용하면, 코드가 간결해짐.

=> 백슬래시()가 필요치 않은 pattern이면, r의 유무에 상관없이 동일한 정규표현식이 됨.

https://docs.python.org/3/library/re.html#raw-string-notation
https://wikidocs.net/4308
https://koreapy.tistory.com/1401

4. 정규표현식 함수

4.1. re.compile(pattern, flags=0)

  • 동일한 pattern을 n번 사용할 경우 활용(패턴을 변수에 지정).

4.2. re.match(pattern, string, flags=0)

4.3. re.fullmatch(pattern, string, flags=0)

  • 정의한 pattern에 주어진 string이 처음부터 끝까지 일치(완전히)하는지 확인.

4.4. re.sub(pattern, repl, string, count=0, flags=0)

  • 정의한 pattern에 해당하는 string을 repl로 대체.

https://greeksharifa.github.io/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D(re)/2018/07/20/regex-usage-01-basic/

https://docs.python.org/3/library/re.html

한글만 추출.

p = re.compile('[^ 가-힣]+') # 가-힣, 띄어쓰기가 아닌 문자 패턴(p)에 저장.
only_hangul = p.sub('', content) # content에서 패턴(p)에 해당하지 않는 것은 삭제.

profile
안녕하세요 반갑습니다. 공부한 내용들을 기록하고 있습니다.

0개의 댓글