2015-07-10 2 views
9

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

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

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 и ленивые = True в противном случае R на макинтош работает на ошибки)

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 

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

+0

тогда 'sharknado' и' foxtel' будут выполнены, так как они не являются «правильными» английскими словами ... –

+0

Вы видите какие-либо улучшения, если используете, например, 'xx <- tm_map (xx, content_transformer (removePunctuation)" или 'xx <- tm_map (xx, content_transformer (tolower)) '? – RHertel

+0

Точный синтаксис может зависеть от номера версии пакета 'tm', который вы установили. – RHertel

ответ

9

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

stringr пакет

Я разобрался часть решения для удаления ретвиты, ссылки на экран имена, Hashtags, пробелы, цифры, знаки препинания, URLs.

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) 

ссылок: (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]*","") 

исх: (Stanton 2013)

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

paste(mytweets, collapse=" ")

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

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

+1

Это отлично работает, но вы не используете 'clean_tweet' в своем аргументе, если вы не хотите перезаписывать переменную! – timothyjgraham

+1

Также убедитесь, что заказ верен. Если вы сначала удалите упоминания, а затем выполните проверку RT ('clean_tweet <- str_replace (clean_tweet," RT @ [az, AZ] *: "," ")'), он ничего не найдет, потому что '@ 'Нет, больше нет – Mathias711

2

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

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

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

Смежные вопросы