2017-02-21 45 views
0

Мне нужно чистить специальные символы, такие как 👉👌💦✨ из твитов. Для того, чтобы сделать это, я следовал этой стратегии (я использую Python 3):Как удалить специальные символы (например, `'ŒðŸ'`) из твитов

  1. Преобразовать твиты из байт в строки, чтобы получить специальные символы, как шестнадцатеричном, так Ã становится \xc3\;
  2. Используя регулярные выражения, удалите b' и b" (в начале строки) и ' или " (в конце строки), добавленные Python после процесса преобразования;
  3. Наконец, удалите шестнадцатеричные представления, также используя регулярное выражение.

Вот мой код:

import re 
tweet = 'b"[/Very seldom~ will someone enter your life] to question\xc3\xa2\xe2\x82\xac\xc2\xa6 "' 

#encoding to 'utf8' 
tweet_en = tweet.encode('utf8') 
#converting to string 
tweet_str = str(tweet_en) 
#eliminating the b' and b" at the begining of the string: 
tweet_nob = re.sub(r'^(b\'b\")', '', tweet_str) 
#deleting the single or double quotation marks at the end of the string: 
tweet_noendquot = re.sub(r'\'\"$', '', tweet_nob) 
#deleting hex 
tweet_regex = re.sub(r'\\x[a-f0-9]{2,}', '', tweet_noendquot) 
print('this is tweet_regex: ', tweet_regex) 

Конечный результат: [/Very seldom~ will someone enter your life] to question " (от которого я до сих пор не удалось удалить окончательный "). Мне было интересно, есть ли лучший и более простой способ очистки специальных символов в данных Twitter. Любая помощь будет оценена.

ответ

1

Я думаю, что это будет хорошо работать, если вы ищете только для ASCII символов:

initial_str = 'Some text 👉👌💦✨ and some more text' 
clean_str = ''.join([c for c in initial_str if ord(c) < 128]) 
print(clean_str) # Some text and some more text 

Вы можете сделать ord(c) in range() и дать ему диапазон текста, который вы хотите сохранить (может быть, чтобы включить смайлики) ,