我正在分析Twitter数据,并希望提取推文中的所有主题标签。我曾经像这样提取主题标签:
tweet = 'I like #apple #orange'
str_extract_all(tweet,"#\\S+")
这在大多数情况下都有效。但是有时两个标签彼此相邻。
tweet = 'I like #apple#orange'
str_extract_all(tweet,"#\\S+")
这是我得到的:
[[1]]
[1] "#apple#orange"
有人知道当标签分开或彼此相邻时,如何正确提取标签吗?
答案 0 :(得分:4)
您正在与\S
过度匹配,因为这将匹配一个非空格字符和一个#
。
您可以使用negated character类来匹配空白字符,也不能匹配#
#[^#\\s]+
您的代码可能看起来像
tweet = 'I like #apple#orange'
str_extract_all(tweet,"#[^#\\s]+")
结果
[[1]]
[1] "#apple" "#orange
答案 1 :(得分:2)
答案 2 :(得分:2)
另一种(可能不太简洁)base
的可能性:
gsub("([a-z](?=#))(#\\w)","\\1 \\2",
strsplit(tweet," (?=#+)",perl = TRUE)[[1]][2], perl=TRUE)
[1] "#apple #orange"
如果您需要将它们分开:
strsplit(gsub("([a-z](?=#))(#\\w)","\\1 \\2",
strsplit(tweet," (?=#+)",perl = TRUE)[[1]][2], perl=TRUE),
" ")
[[1]]
[1] "#apple" "#orange"