仅包含主题标签的推文的正则表达式

时间:2015-01-18 05:03:00

标签: regex r twitter

我正在使用R并拥有大量的推文数据框。我想要一个grep调用,它会选择仅由hashtags组成的推文(想要从最终的数据帧中排除这些)。

我最初的努力:

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

我希望这会选择以hashtag ^#\ w *开头的多个单词,而不是选择没有主题标签的单词[^ \ w]。

然而,由于此类收集的推文类型仍然包含主题标签中的文本,我显然已经耗尽了人才,例如:

  

#wtf现在正在发生。这辆卡车在高速公路中心行驶50路。 #learntodrive

     

#WhatGrindsMyGears当有人在我面前退出时,永远不会进入速度限制或以上。 #roadrage

     <#>#Waymin #Vestminster #travel #roadrage #transport #London #tourism #sightseeing #dark #clouds

任何建议都非常感谢,

感谢

2 个答案:

答案 0 :(得分:3)

我不确定我是否理解你的问题,这里的正则表达式只匹配只包含主题标签的推文:

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

答案 1 :(得分:1)

要确定特定推文是否只有主题标签,您可以使用strsplit对其进行标记,然后在列表中搜索不以&#34;#&#34;开头的条目。考虑tweet1(只有hashtags)和tweet2(hashtags加上单词)。

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()为tweet2返回TRUE,为tweet1返回FALSE。