Как очистить данные twitter в R?

153
16

Я извлек твиты из twitter с помощью пакета twitteR и сохранил их в текстовый файл.


Я выполнил следующее на корпусе


xx<-tm_map(xx,removeNumbers, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,stripWhitespace, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,removePunctuation, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,strip_retweets, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,removeWords,stopwords(english), lazy=TRUE, 'mc.cores=1')

(используя mc.cores = 1 и lazy = True, поскольку в противном случае R на mac запутывается в ошибки)


tdm<-TermDocumentMatrix(xx)

Но в этой терминологической матрице документов есть много странных символов, бессмысленных слов и т.п.
Если твит


 RT @Foxtel: One man stands between us and annihilation: @IanZiering.
Sharknado‚Äã 3: OH HELL NO! - July 23 on Foxtel @SyfyAU

После очистки твита я хочу оставить только правильные полные английские слова, т.е. предложение/фразу, лишенную всего остального (имена пользователей, сокращенные слова, URL-адреса)


пример:


One man stands between us and annihilation oh hell no on 

(Примечание. Команды преобразования в пакете tm могут удалять только стоп-слова, пробелы в пунктуации, а также преобразование в нижний регистр).

спросил(а) 2021-01-25T17:08:56+03:00 4 месяца, 4 недели назад
1
Решение
158

Использование gsub и


stringr package



Я выяснил часть решения для удаления ретвитов, ссылки на имена экранов, хэштеги, пробелы, числа, пунктуации, URL-адреса.


  clean_tweet = gsub("&amp", "", unclean_tweet)
clean_tweet = gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", clean_tweet)
clean_tweet = gsub("@\\w+", "", clean_tweet)
clean_tweet = gsub("[[:punct:]]", "", clean_tweet)
clean_tweet = gsub("[[:digit:]]", "", clean_tweet)
clean_tweet = gsub("http\\w+", "", clean_tweet)
clean_tweet = gsub("[ \t]{2,}", "", clean_tweet)
clean_tweet = gsub("^\\s+|\\s+$", "", clean_tweet)

ref: (Хикс, 2014)
После вышесказанного
Я сделал следующее.


 #get rid of unnecessary spaces
clean_tweet <- str_replace_all(clean_tweet," "," ")
# Get rid of URLs
clean_tweet <- str_replace_all(clean_tweet, "http://t.co/[a-z,A-Z,0-9]*{8}","")
# Take out retweet header, there is only one
clean_tweet <- str_replace(clean_tweet,"RT @[a-z,A-Z]*: ","")
# Get rid of hashtags
clean_tweet <- str_replace_all(clean_tweet,"#[a-z,A-Z]*","")
# Get rid of references to other screennames
clean_tweet <- str_replace_all(clean_tweet,"@[a-z,A-Z]*","")

ref: (Stanton 2013)


Прежде чем делать что-либо из вышеперечисленного, я свернул всю строку в один длинный символ, используя ниже.


paste(mytweets, collapse=" ")


Этот процесс очистки работал у меня довольно хорошо, в отличие от преобразований tm_map.


Все, что я оставил сейчас, это набор правильных слов и очень немного неправильных слов.
Теперь мне нужно только выяснить, как удалить ненужные английские слова.
Вероятно, мне придется вычитать мой набор слов из словаря слов.

ответил(а) 2021-01-25T17:08:56+03:00 4 месяца, 4 недели назад
78

Чтобы удалить URL-адреса, вы можете попробовать следующее:


removeURL <- function(x) gsub("http[[:alnum:]]*", "", x)
xx <- tm_map(xx, removeURL)

Возможно, вы могли бы определить похожие функции для дальнейшего преобразования текста.

ответил(а) 2021-01-25T17:08:56+03:00 4 месяца, 4 недели назад
63

Для меня этот код не работал, для некоторых reason-

# Get rid of URLs
clean_tweet <- str_replace_all(clean_tweet, "http://t.co/[a-z,A-Z,0-9]*{8}","")

Ошибка was-

Error in stri_replace_all_regex(string, pattern, fix_replacement(replacement),  : 
Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)

Так что вместо этого я использовал

clean_tweet4 <- str_replace_all(clean_tweet3, "https://t.co/[a-z,A-Z,0-9]*","")
clean_tweet5 <- str_replace_all(clean_tweet4, "http://t.co/[a-z,A-Z,0-9]*","")

избавиться от URL

ответил(а) 2021-01-25T17:08:56+03:00 4 месяца, 4 недели назад
45

как с эмодзи, пожалуйста, у вас есть решение, чтобы удалить его??

ответил(а) 2021-01-25T17:08:56+03:00 4 месяца, 4 недели назад
45

Код сделать базовую очистку

Преобразует в нижний регистр
df <- tm_map(df, tolower)  
Удаление специальных символов
df <- tm_map(df, removePunctuation)
Удаление специальных символов
df <- tm_map(df, removeNumbers)
Удаление общих слов
df <- tm_map(df, removeWords, stopwords('english'))
Удаление URL
removeURL <- function(x) gsub('http[[:alnum;]]*', '', x)

ответил(а) 2021-01-25T17:08:56+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема