从 R 中提取推文中引用的 Twitter 用户名

3

我正试图在 R 中的 Tweets 数据库中获取所有被引用的 Twitter 帐户列表。我已将每个推文分段为单词列表(作为字符串),现在我想查找以“@”开头的每个值,并将其保存(或者如果有多个引用,则保存列表)到数据库的新列中。

数据示例:

@medieninsider Was meinen Sie, woher der zitierte Ausschnitt stammt?  Die Angabe der Quelle habe ich mir gespart, sie nennt sich in 6 Sätzen ja selbst 3 Mal.  P.S.: 17 € pro Monat für eine Website und paar SPAM-Mails - da gibt es für 18,36 € aber DEUTLICH mehr und vielfältigeres beim ÖRR.

通过使用函数strsplit(),我能够从这个字符串中生成以下列表:

[[1]]
 [1] "@medieninsider" "Was"            "meinen"         "Sie,"          
 [5] "woher"          "der"            "zitierte"       "Ausschnitt"    
 [9] "stammt?"        ""             "Die"            "Angabe"        
[13] "der"            "Quelle"         "habe"           "ich"           
[17] "mir"            "gespart,"       "sie"            "nennt"         
[21] "sich"           "in"             "6"              "Sätzen"        
[25] "ja"             "selbst"         "3"              "Mal."          
[29] ""             "P.S.:"          "17"             "€"             
[33] "pro"            "Monat"          "für"            "eine"          
[37] "Website"        "und"            "paar"           "SPAM-Mails"    
[41] "-"              "da"             "gibt"           "es"            
[45] "für"            "18,36"          "€"              "aber"          
[49] "DEUTLICH"       "mehr"           "und"            "vielfältigeres"
[53] "beim"           "ÖRR." 

我该如何将 Twitter 帐户(以 "@" 为前缀)提取为新变量?

2个回答

2
您可以使用sub
string <- "@medieninsider Was meinen Sie, woher der zitierte Ausschnitt stammt?  Die Angabe der Quelle habe ich mir gespart, sie nennt sich in 6 Sätzen ja selbst 3 Mal.  P.S.: 17 € pro Monat für eine Website und paar SPAM-Mails - da gibt es für 18,36 € aber DEUTLICH mehr und vielfältigeres beim ÖRR."

sub("(@\\w+)\\s+.*", "\\1", string)
[1] "@medieninsider

另一个选择是使用str_extract_all,如果您有一个由几个推文组成的向量。
library(stringr)
str_extract_all(string, "(@\\w+)")
[[1]]
[1] "@medieninsider"

非常感谢。使用“st_extract_all”还可以识别句子标记(“。”、“,”等),因此对于具有多个引用的帖子,这是最好的选项! - Daniel Sezari

2

使用stringr中的str_detect函数

假设生成的列表是vec,然后使用vec

index <- which(str_detect(vec,'@'))
vec[index]

谢谢,这个也可以。但是使用Jilber Urbina的解决方案,我不需要在中间步骤中创建一个字符串向量。所以这解决了我的问题,但你的答案也满足了我的要求 :) - Daniel Sezari

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