자연어 처리 공부를 위해 해당 책을 선정하였으며, 책을 메인으로 공부하며 구글링과 함께 정리를 한 게시글입니다.
sentence = "Hello Ki, I would like to introduce regular expression in this section.\n" + \
"~~\n" + \
"Thank you!\n" + \
"Sincerely,\n\n" + \
"Ki: +82-10-1234-5678"
데이터에 있는 전화번호와 이름을 없앨 예정입니다.
해당 데이터의 경우 마지막 줄을 삭제해도 되겠지만 전화번호와 이름을 무조건 마지막에 온다는 법은 없습니다.
데이터를 얼추 살펴보면 규칙은 다음과 같습니다.
- 이름이 전화번호 앞에 나올 수도 있다.
- 이름 뒤에 콜론(:)이 나올 수도 있다.
- 콜론 앞/뒤로는 (탭을 포함한) 공백이 다수 존재할 수도 있다.
- 전화번호는 국가번호를 포함할 수도 있다.
- 국가번호는 최대 3자리이다.
- 국가번호의 앞에는 '+'가 붙을 수도 있다.
- 전화번호 사이에는 공백이 없다.
- 전화번호 사이에 '-'가 들어갈 수도 있다.
- 지역번호 자리의 맨 처음에 나오는 0은 빠질 수도 있다. 즉, 2자리가 될 수도 있다.
- 지역번호 다음 번호 그룹은 3에서 4자리 숫자이다.
- 마지막은 항상 4자리 숫자이다.
앞의 규칙을 정규 표현식으로 표현해보겠습니다.
정규 표현식 : ([\w]+\s*:?\s*)?
- 이름이 전화번호 앞에 나올 수도 있다. [\w]+
- 이름 뒤에 콜론(:)이 나올 수도 있다. :?
- 콜론 앞/뒤로는 (탭을 포함한) 공백이 다수 존재할 수도 있다. \s*:\s*
정규 표현식 : (\+?[0-9]{1,3}\-?)?
- 전화번호는 국가번호를 포함할 수도 있다. (국가번호)?
- 국가번호는 최대 3자리이다. [0-9]{1,3}
- 국가번호의 앞에는 '+'가 붙을 수도 있다. \+? 국가번호
- 전화번호 사이에는 공백이 없다.
정규 표현식 : [0-9]{2,3}\-?[0-9]{3,4}\-?[0-9]{4}
- 전화번호 사이에 '-'가 들어갈 수도 있다. \-?
- 지역번호 자리의 맨 처마에 나오는 0은 빠질 수도 있다. 즉, 2자리가 될 수도 있다. [0-9]{2,3}
- 지역번호 다음 번호 그룹은 3에서 4자리 숫자이다. [0-9]{3,4}
- 마지막은 항상 4자리 숫자이다. [0-9]{4}
최종 정규 표현식 : ([\w]+\s*:?\s*)?(\+?[0-9]{1,3}\-?)?[0-9]{2,3}\-?[0-9]{3,4}\-?[0-9]{4}
import re
sentence = "Hello Ki, I would like to introduce regular expression in this section.\n" + \
"~~\n" + \
"Thank you!\n" + \
"Sincerely,\n\n" + \
"Ki: +82-10-1234-5678"
regex = r"([\w]+\s*:?\s*)?(\+?[0-9]{1,3}\-?)?[0-9]{2,3}\-?[0-9]{3,4}\-?[0-9]{4}"
print('----------------------------------------------')
print(sentence)
print('----------------------------------------------')
print(re.sub(regex, "Removed!!!", sentence))
올바르게 제거가 된 것을 볼 수 있다.
'[NLP] 자연어 처리 > [NLP] 전처리' 카테고리의 다른 글
[NLP] NLTK, NLTK data 설치 (0) | 2021.02.01 |
---|---|
[NLP] 전처리 - 1 (0) | 2021.01.22 |