#r #string #twitter #text-mining
#r #строка #Twitter #интеллектуальный анализ текста
Вопрос:
У меня есть текст твита, подобный этому в R.
"RT @SportClipsUT125: #SavingLivesLooksGood with #RedCross. Donate this month amp;amp; Get free haircut cpn. https://somewebsite https://somewebsite…"
Как я могу удалить все ссылки (для удаления повторяющихся твитов), чтобы следующий твит фактически возвращал строку ниже?
"RT @SportClipsUT125: #SavingLivesLooksGood with #RedCross. Donate this month amp;amp; Get free haircut"
Я пробовал это:
gsub('https*','',test_str)
но оно возвращает
"RT @SportClipsUT125: #SavingLivesLooksGood with #RedCross. Donate this
month amp;amp; Get free haircut cpn. ://somewebsite ://somewebsite…"
Комментарии:
1. Вам нужно поместить квантификатор в символ, который вы хотите повторить.
\S
есть что-нибудь, кроме символа пробела:gsub('http\S*', '', "RT @SportClipsUT125: #SavingLivesLooksGood with #RedCross. Donate this month amp; Get free haircut cpn. https://somewebsite https://somewebsite…")
2. может быть, вы можете снова отправить тот же запрос в Twitter, добавив -RT (с учетом регистра). Это приведет к удалению ретвитов.
3. Спасибо @alistaire это действительно работает! Итак, что делает ваш код, на самом деле удаляет все после https и пробела?
4. Он ищет шаблон «http», за которым следует любой символ, кроме пробела, повторяемый 0 или более раз, и заменяет его ничем. На самом деле это оставит конечные пробелы, но вы могли бы добавить, чтобы решить эту проблему, если это имеет значение.
Ответ №1:
Простое решение — изменить вашу команду gsub:
gsub("http[s]*://[[:alnum:]]*", "", test_str)
Это правильно удалит URL-адреса, как http, так и https-версии
предложение @alistaire в комментариях на самом деле работает в большем количестве случаев, более понятно gsub('http\S*', "", test_str)
, удалит все, что начинается с http. Он остановится, когда найдет пробел (которого нет в URL)
gsub("(RT|via)((?:\b\W*@\w ) )", "", test_str)
чтобы удалить ретвиты
gsub("@\w ", "", test_str)
удалить Atpeople
Я бы настоятельно рекомендовал поместить ваши данные в корпус (специальный формат данных), это упрощает такие вещи, как удаление часто повторяющихся слов и URL-адресов. Если у вас есть массив данных, вы могли бы сделать это:
corpus <- Corpus(VectorSource(my_data))
corpus = tm_map(corpus,content_transformer(function(x) iconv(x, to='UTF8', sub='byte')))
removeURL <- function(x) {gsub('http\S*', "", x)}
corpus <- tm_map(corpus, content_transformer(removeURL))
Потрясающая ссылка для примеров того, как все это сделать:
Руководство по интеллектуальному анализу текста на Rpubs
Комментарии:
1. Спасибо за ваш ответ. Но я попробовал gsub («http[[:alnum:]]*», «», test_str), но он только избавился от «http» и оставил там остальную короткую ссылку?
2. Упс, исправлено (в зачеркнутом коде), но предложение @alistaire лучше подходит для этой конкретной проблемы.