【发布时间】:2014-12-09 21:21:59
【问题描述】:
我正在尝试从一些推文中提取所有主题标签,并为每条推文获取一个包含所有主题标签的字符串。
我正在使用来自stringr 的str_extract,所以我获得了一个字符向量列表。我的问题是我无法将其取消列出并保留相同数量的列表元素(即推文数量)。
示例:
这是长度为 3 的推文向量:
a <- "rt @ugh_toulouse: #mondial2014 : le top 5 des mannequins brésiliens http://www.ladepeche.fr/article/2014/06/01/1892121-mondial-2014-le-top-5-des-mannequins-bresiliens.html #brésil "
b <- "rt @30millionsdamis: beauté de la nature : 1 #baleine sauve un naufragé ; elles pourtant tellement menacées par l'homme... http://goo.gl/xqrqhd #instinctanimal "
c <- "rt @onlyshe31: elle siège toujours!!!!!!! marseille. nouveau procès pour la députée - 01/06/2014 - ladépêche.fr http://www.ladepeche.fr/article/2014/06/01/1892035-marseille-nouveau-proces-pour-la-deputee.html #toulouse "
all <- c(a, b, c)
现在我使用str_extract_all 来提取主题标签:
ex <- str_extract_all(all, "#(.+?)[ |\n]")
如果我现在使用unlist,我会得到一个长度为 5 的向量:
undesired <- unlist(ex)
> undesired
[1] "#mondial2014 " "#brésil "
[3] "#baleine " "#instinctanimal "
[5] "#toulouse "
我想要的是如下所示。然而,这是非常低效的,因为它不是矢量化的,而且它需要永远(真的!)在一个小的推文数据帧上:
desired <- c()
for (i in 1:length(ex)){
desired[i] <- paste(ex[[i]], collapse = " ")
}
> desired
[1] "#mondial2014 #brésil "
[2] "#baleine #instinctanimal "
[3] "#toulouse "
救命!
【问题讨论】:
-
您的正则表达式效率低下而且有点错误。 (你不应该有一个
+修饰符和一个?修饰符,并且匹配.很慢。)试试"#([[:alpha:]][[:alnum:]]*)"。 (但请仔细检查这是否适用于您的语言环境中的 unicode 字符。另请参阅stackoverflow.com/q/14823376/134830) -
很好的建议。我最终在我的数据上使用了它
data$hashtags <- str_trim(str_replace_all(sapply(stri_extract_all_regex(data$texte_du_tweet, '#([[:alpha:]][[:alnum:]]*)'), paste, collapse=' '), "[^[:alnum:] ]", ""))
标签: r twitter vectorization stringr