如何在R中从推文中提取标签?

6
我知道这个问题已经在这里这里被问过,但当我尝试时出现了一个小问题:
x<- str_extract("Hello peopllz! My new home is #crazy gr8! #wow", "#\S+")
Error: '\S' is an unrecognized escape in character string starting "#\S"

我将正则表达式更改为"#(.+) ?""#\\s",但它们并没有提取出标签。
然后我尝试了gsub的方式:
x<- gsub("[^#(.+) ?]","","Hello! #London is gr8. #Wow")

它给出了:" # . #"

有什么想法,我做错了什么吗?我希望我的输出是推文中所有哈希标签的向量/列表(不包括#符号!)

编辑:我不想分词推文,因为: 1. 我不会对程序的其余部分进行分词, 2. 如果我要扩展它以处理大量推文,这将成为一个非常昂贵的步骤。

3个回答

11

使用"#\\S+"代替"#\S+"

str_extract_all("Hello peopllz! My new home is #crazy gr8! #wow", "#\\S+")
# [[1]]
# [1] "#crazy" "#wow"  

这里进行了两个层次的解析。在低级别的str_extract正则表达式函数获取到想要搜索的模式(即"#\S+")之前,它首先被R解析。R不将\S视为有效的转义字符并抛出错误。通过用\\转义斜杠,您告诉R将\S作为两个普通字符传递给正则表达式函数,而不是将其解释为一个转义字符

旁路

这可能会产生相当奇怪的表达式。假设您有一个计算机地址列表,采用"\\computer"的Windows网络形式。要搜索它,您需要键入str_extract(adr, "\\\\\\w+"),这将在内部转换为"\\\w+",然后进行搜索。


可以,谢谢!但是我如何从推文中提取所有的标签呢?这将给我第一个出现的标签。有什么绕过它的方法吗? - jackStinger
x <- gregexpr("#(\S+)", "Hello! #伦敦 is gr8. #哇") 可以给出推文的位置和长度,可以用来提取标签,但没有更简单的方法吗? - jackStinger
很好的答案,可能需要使用“#\w+”而不是“#\S+”,这样就不会包括标点符号了。 - RDRR

3

我来发表一下意见。根据您访问Twitter数据的方式,这些信息可能已经被解析好了。例如,如果您访问示例流,原始JSON格式会将引用、标签等解析为一个数组。请参阅twitter api文档


0

#\S+替换为#\\\S+怎么样?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接