2015-01-18 5 views
2

Я использую R и имею большой размер данных твитов. Мне нужен grep-вызов, который будет выбирать твиты, которые состоят из ничего, кроме hashtags (хотите исключить их из окончательного фрейма данных).Регулярное выражение для твитов, содержащих только хэштеги

Мои первоначальные усилия Grep:

hashtagonly_tweets_INDEX = grep("^#\\w*[^\\w]", allTweets$V1, 
          value=F, 
          ignore.case = T, 
          fixed=F) 

Я надеялся, что это было бы выбрать несколько слов, начинающихся с хэштегом #^\ ш *, а не выбирать слова без хэштегом [^ \ ш].

Однако я четко кончусь талант в этот момент, как типы твитов это накапливает все еще содержит текст среди хэштег, например:

#wtf даже происходит прямо сейчас. этот грузовик водит 50 по центру шоссе. #learntodrive

#WhatGrindsMyGears Когда кто-то вытаскивает передо мной, то никогда не переходит на ограничение скорости или выше. #roadrage

#Traffic в #Westminster #travel #roadrage #transport #London #tourism #sightseeing #dark #clouds

Любой совет высоко ценится,

благодаря

+0

Вы хотите только извлечь '# wtf' из первой строки' #WhatGrindsMyGears, # roadrage' из 2-й строки ...? – akrun

+5

При запросе справки по регулярному выражению укажите четкий ввод и желаемый результат. Обязательно включайте положительные и отрицательные результаты. Вы должны быть максимально ясными. На всех ваших примерах, по-видимому, есть хотя бы одно слово, которое не является хэштегом. – MrFlick

+3

Возможно, вы захотите изучить 'qdapRegex :: rm_hash' –

ответ

3

Не уверен, что я хорошо понять ваш вопрос, вот регулярное выражение, которое соответствует твитам, которые состоят только из хэштегов:

^\s*(?:#\w+\s*)+$ 
+0

СПАСИБО! Это сработало отлично. Я очень ценю вашу помощь. –

+0

@SteveTrawley: Добро пожаловать. – Toto

+0

Я получаю FALSE, когда запускаю 'grepl ("/^ \\ s * (?: # \\ w + \\ s *) + $/"," #hello #world ")' - почему это не Работа? @JESUISCHARLIE вы можете показать пример в R вместе с вашим регулярным выражением? –

1

Чтобы определить, имеет ли конкретный твит только хэштег, вы можете использовать strsplit для его токенизации, а затем искать записи в списке, которые не начинаются с «#». Рассмотрим tweet1 (только хэштеги) и tweet2 (хэштеги плюс слова).

tweet1 <- "#TraffiC#in #Westminster #travel #roadrage #transport #London #tourism #sightseeing #dark #clouds" 
tweet2 <- "#Traffic in #Westminster #travel #roadrage #transport #London #tourism #sightseeing #dark #clouds" 

haswords <- function(tweet) { 
    strings <- strsplit(tweet,' ') 
    for (word in 1:length(strings[[1]])) { 
     if (substring(strings[[1]][word],1,1) != '#') { 
      return (TRUE) 
     } 
    } 
    FALSE 
} 

Функция haswords() возвращает TRUE, для tweet2 и FALSE для tweet1.

+0

Отлично, спасибо! –

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