일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- github actions
- 프로그래머스 코딩테스트 연습문제
- 파이썬
- pycharm
- selenium
- PostgreSQL
- FastAPI
- 프로그래머스 월간 코드 챌린지
- Word Cloud
- 프로그래머스 코딩테스트 연습
- git
- 프로그래머스 코딩 테스트 연습
- WPF
- Firefox
- 스코페2021
- Codeforces
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- 프로그래머스 월간 코드 챌린지 시즌1
- c#
- Python
- terraform
- 클린 코드
- 바이오데이터 엔지니어
- PostgreSQL 설치 시 에러
- 브랜디
- github
- heroku
- 디자인 패턴
- Spring Boot
- 애드센스
- Today
- Total
프로그래밍 연습하기
Python에서 텍스트 안의 이모지(emoji)제거하기 본문
파이썬으로 텍스트를 처리하던 도중
안에 이모지가 있으면 처리를 못해서 에러가 나는 일이 있었습니다.
셀레니움 find_element_by_*****.send_key(text)
에서 text에 이모지가 있을 때
WebDriverException: unknown error: ChromeDriver only supports characters in the BMP
크롬드라이버에서 지원하지 않는 문자라고 나옵니다.
그래서 방법을 찾아보았습니다.
https://stackoverflow.com/questions/33404752/removing-emojis-from-a-string-in-python
여기에 나온 방법으로 정규 표현식을 통해 이모지만 제거해 줄 수 있었습니다.
반대로 findall을 사용해서 패턴에 속하는 문자들(이모지)만 얻을 수도 있습니다.
#!/usr/bin/env python
import re
text = u'This dog \U0001f602'
print(text) # with emoji
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"]+", flags=re.UNICODE)
print(emoji_pattern.sub(r'', text)) # no emoji
print(emoji_pattern.findall(text)) # only emoji
이외 다른 방법으로
def deEmojify(inputString):
return inputString.encode('ascii', 'ignore').decode('ascii')
이 방법도 있었지만 아무래도 아스키코드로 인코딩을 하다보니 한글 같은 문자도 전부 지워져서 사용하기 힘들 것 같았습니다.
임시방편으로 ascii가 아니라 euc-kr로 바꿔준다면 한글은 지워지지 않는 것을 확인했는데 ,이러다 보면 또 euc-kr에서 지원하지 않는 문자가 지워질 수도 있을 것 같아서 첫번째 방법이 제일 좋다고 생각합니다.
이외에도 비슷한 오류가 생겨서 더 알아봤더니...
에러 메세지의 BMP란 유니코드에서 Basic Multilingual Plane(기본 다국어 평면)을 의미합니다.
따라서 이모지 뿐만 아니라 BMP영역 이외의 문자의 사용이 불가능하다는 것을 알게 되었습니다.
특정 이모지만 제거하는 것이 아니라 BMP영역 이외 문자를 제거하는 것으로 바꿔야 할 것 같습니다.
0000-FFFF 까지가 BMP이고 10FFFF까지 SMP, SIP, TIP, SSP, PUA 공간이 잡혀있어서
10000-10FFFF까지 제거하는 것으로 코드를 바꿔보았습니다.
import re
text = '안녕하세요 반갑습니다🐶'
print(text)
only_BMP_pattern = re.compile("["
u"\U00010000-\U0010FFFF" #BMP characters 이외
"]+", flags=re.UNICODE)
print(only_BMP_pattern.sub(r'', text))# BMP characters만
이런식으로 수정할 수 있지 않을까 싶습니다.
'Python' 카테고리의 다른 글
파이썬 PriorityQueue(우선순위 큐) (0) | 2020.09.08 |
---|---|
초(Second)를 날짜(Date)로 바꾸기 (0) | 2020.07.31 |
워드 클라우드 프로젝트 (0) | 2020.07.21 |
고성능 파이썬(High Performance Python)을 읽고 (0) | 2019.11.18 |
Python Selenium으로 웹 페이지 인쇄 자동화 하기 (0) | 2019.07.05 |