在R语言中从推文数据库提取引用的Twitter用户名方法问询
提取推文里的Twitter提及账号并存入数据库新列
嘿,我来帮你搞定这个需求!你已经用strsplit()把每条推文拆成了单词列表,不过其实有两种思路可以完成提取@开头账号的任务,还能直接处理可能带标点的情况,一起来看看:
方法一:基于你已拆分的单词列表(Base R)
如果你已经有了拆分后的单词列(比如数据框里叫split_words),可以用lapply()遍历每个单词列表,筛选出以@开头的内容:
# 假设你的数据框是tweets_df,拆分后的列是split_words tweets_df$mentioned_accounts <- lapply(tweets_df$split_words, function(word_list) { # 筛选所有以@开头的元素 word_list[grepl("^@", word_list)] })
这样处理后,mentioned_accounts列会是一个列表列——每条推文对应的元素是该条推文里所有@账号组成的向量,没有提及账号的话就是空向量,完全符合你要的格式。
方法二:直接从原始文本提取(更高效准确,推荐)
其实不用先拆分单词,用stringr包的str_extract_all()可以直接从原始推文文本里提取符合Twitter账号规则的内容(避免账号后面带逗号、句号等标点的干扰):
首先安装并加载stringr:
install.packages("stringr") library(stringr)
然后提取账号:
# 从原始text列提取@开头+字母/数字/下划线的账号 tweets_df$mentioned_accounts <- str_extract_all(tweets_df$text, "@[A-Za-z0-9_]+")
这个正则表达式@[A-Za-z0-9_]+会精准匹配合法的Twitter账号(Twitter账号只能包含字母、数字和下划线),比如能把@medieninsider,里的@medieninsider单独提取出来,结果同样是列表列,多个账号会自动存成向量。
存入数据库新列
接下来把这个新列存入数据库,这里分两种常用场景:
用DBI直接操作数据库
假设你用DBI包连接了数据库(比如SQLite、PostgreSQL),先添加新列,再写入数据:
library(DBI) # 假设你的数据库连接对象是con # 先添加新列,注意不同数据库的数组类型:PostgreSQL用TEXT[],SQLite用TEXT dbExecute(con, "ALTER TABLE tweets ADD COLUMN mentioned_accounts TEXT[]") # 将处理后的数据框写入数据库(覆盖原表的话调整overwrite参数) dbWriteTable(con, "tweets", tweets_df, overwrite = FALSE, append = FALSE, row.names = FALSE)
用dplyr+dbplyr做数据库端操作
如果习惯用dplyr语法,可以直接在数据库层面完成提取和列添加:
library(dplyr) library(dbplyr) # 连接数据库表 tweets_db <- tbl(con, "tweets") %>% # 直接在数据库端提取账号,生成新列 mutate(mentioned_accounts = str_extract_all(text, "@[A-Za-z0-9_]+")) %>% # 将结果存入数据库(默认生成临时表,用compute()存为永久表) compute(name = "tweets", overwrite = TRUE)
内容的提问来源于stack exchange,提问作者Daniel Sezari
相关产品推荐
相关产品推荐

