Удалить предложение, начинающееся со слова в R?

#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 лучше подходит для этой конкретной проблемы.