У меня есть daaframe с более чем 300000 записей твитов. Моя цель - классифицировать твиты по идентификатору автора или, другими словами, предсказать автора.
Проблема в том, что данные в твиттере очень грязные. многие орфографические ошибки, диалект и использование URL, эмодзи, хэштеги делают его еще хуже. Даже после очистки данных с помощью очень простых правил фильтрации, таких как re.sub(r'[a-zA-Z]',' ',text)
, удаления nltk.stopwords('english)
, удаления твитов, содержащих менее 3 слов, и удаления URL-адресов, у меня есть вектор признаков, которому моя система не может выделить память. Что я могу сделать больше?
Могу ли я удалить строки, где автор опубликовал только один раз? (что если он / она пишет в Твиттере в тестовых данных?)
Вот мой код очистки текста
def text_cleaner(text):
# text = re.sub(r'^https?:\/\/.*[\r\n]*', '-URL-', text, flags=re.MULTILINE) # sub URL
text = re.sub(r'http\S+', ' ', text)
text = re.sub(r'www\S+', ' ', text)
text = re.sub(r'\d',' ',text) # remove any number
# text = re.sub('@handle',' ',text)
text = re.sub(r'@\w+', '', text)
text = re.sub(r'[^a-zA-Z]', ' ', text) # very basic operation of cleaning
# text = re.sub(r'[:]',' ',text) # special characters
# text = re.sub(r'[-]',' ',text)
# text = re.sub(r'[!]',' ',text)
# text = re.sub(r'[_]',' ',text)
# text = re.sub('[?]',' ',text)
# text = re.sub('[.]',' ',text)
# text = re.sub('[+]',' ',text)
# text = re.sub('[=]',' ',text)
# text = re.sub(r'([\W_])\1+',' ',text) # multiple repeating special characters
# text = re.sub(r'(?<=\s)[\W\d](?=(\s|$))', ' ', text)
# text = re.sub(r'(?<=\w)\W+(?=(\s|$))', ' ', text)
# text = re.sub(r'(\W)\1+(?=\w)', r'\1', text)
text = re.sub('\n',' ',text)
text = re.sub('\s\s+',' ',text) # multiple space
text = text.lstrip()
text = text.rstrip()
return text
df['tweet'] = df['tweet'].apply(lambda text: remove_contraction(text)) # remove contractions
df['tweet'] = df['tweet'].apply(lambda text: remove_stopwords(text)) # remove stopwords
df['tweet'] = df['tweet'].apply(lambda text: text_cleaner(text)) # clean text
df['tweet'] = df['tweet'].apply(lambda text: ' '.join([lemma.lemmatize(word) for word in text.split(' ')]))
Может кто-нибудь подсказать, как уменьшить размеры