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

Я извлек твиты из твиттера с помощью пакета 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 способны удалять только стоп-слова, знаки препинания, а также перевод в нижний регистр)

3 ответа

Решение

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

Струнный пакет

Я разобрался с частью решения по удалению ретвитов, ссылок на псевдонимы, хэштеги, пробелы, числа, знаки препинания, 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: (Hicks, 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]*","")   

ссылка: (Стентон 2013)

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

paste(mytweets, collapse=" ")

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

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

    library(tidyverse)    

    clean_tweets <- function(x) {
                x %>%
                        str_remove_all(" ?(f|ht)(tp)(s?)(://)(.*)[.|/](.*)") %>%
                        str_replace_all("&amp;", "and") %>%
                        str_remove_all("[[:punct:]]") %>%
                        str_remove_all("^RT:? ") %>%
                        str_remove_all("@[[:alnum:]]+") %>%
                        str_remove_all("#[[:alnum:]]+") %>%
                        str_replace_all("\\\n", " ") %>%
                        str_to_lower() %>%
                        str_trim("both")
        }

    tweets %>% clean_tweets

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

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

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

Для меня этот код не работал, по некоторым причинам

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

Ошибка была

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

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

Преобразует в нижний регистр

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)
Другие вопросы по тегам