首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除R中的重复tweet?

如何删除R中的重复tweet?
EN

Stack Overflow用户
提问于 2013-06-04 16:32:16
回答 2查看 3K关注 0票数 4

我正在对tweet进行文本挖掘我对重复的tweet有一个问题,如下所示:

aeCERT :aeCERT为选民、执法部门、学术界和公众提供持续的信息安全意识计划。

Salim_aeCERT: aeCERT为选民、执法部门、学术界和公众提供持续的信息安全意识计划。

我收到了两个不同账户的相同推文,我如何从我的数据集中删除一个?我已经尝试过这个代码,但是重复的tweet仍然出现:

代码语言:javascript
复制
tweets1.df <- do.call("rbind", lapply(tweets, as.data.frame))
tweets2.df <- tweets1.df[duplicated(tweets1.df ) == FALSE,] 
dim(tweets2.df)

如何删除不同账号的重复推文?

EN

回答 2

Stack Overflow用户

发布于 2013-06-04 17:29:52

从tweet中提取文本,然后使用duplicated删除实际的重复项。

代码语言:javascript
复制
tweets = searchTwitter('aeCERT: aeCERT' , n=100, cainfo = "cacert.pem")
texts <- sapply( unlist( tweets ) , function(x) `$`( x , "text" ) )
length(texts)
#[1] 100
texts[87:91]
#[1] "You should always update your Operating System  to reduce and eliminate vulnerabilities  http://t.co/l0sdv0k304"                            
#[2] "We are today at Dubai Electricity and Water Authority (DEWA) in Dubai conducting information security awareness workshop by Eng. Khalifa..."
#[3] "We are today at Dubai Electricity and Water Authority (DEWA) in Dubai conducting information security awareness workshop by Eng. Khalifa..."
#[4] "صباح الخير لجميع المغردين ..متواجدين اليوم في هيئة كهرباء ومياه دبي  لعقد ورش التوعية الأمنية الالكترونية يقدمها المهندس خليفة الشامسي"     
#[5] "صباح الخير لجميع المغردين ..متواجدين اليوم في هيئة كهرباء ومياه دبي  لعقد ورش التوعية الأمنية الالكترونية يقدمها المهندس خليفة الشامسي"

unq.texts <- texts[ ! duplicated( texts ) ]
length(unq.texts)
#[1] 82
unq.texts[71:74]
#[1] "You should always update your Operating System  to reduce and eliminate vulnerabilities  http://t.co/l0sdv0k304"                             
#[2] "We are today at Dubai Electricity and Water Authority (DEWA) in Dubai conducting information security awareness workshop by Eng. Khalifa..." 
#[3] "صباح الخير لجميع المغردين ..متواجدين اليوم في هيئة كهرباء ومياه دبي  لعقد ورش التوعية الأمنية الالكترونية يقدمها المهندس خليفة الشامسي"      
#[4] "RT @Salim_aeCERT: لا تستجب للمكالمات الهاتفية التي تخبرك بأنك ربحت جوائز قيمة ومبالغ مالية، فقد تكون ضحية للاحتيال #aecert http://t.co/HTK5…"

请注意,即使是推文文本中的一个字符更改,也意味着推文不会被检测为重复(例如,当有人通过不同的链接缩短程序转发并添加链接时,这一点是相关的)。

你也可以像这样做

代码语言:javascript
复制
sapply( unlist( tweets ) , function(x) length(`$`( x , "replyToUID" ) ) > 0 )

获取回复某人的tweet的所有tweet的逻辑向量,或者

代码语言:javascript
复制
sapply( unlist( tweets ) , function(x) length(`$`( x , "retweeted" ) ) > 0 )

获取转发的tweet的逻辑向量(但我不确定这是否可靠,因为在我的示例中没有tweet是转发)。可以使用(例如)找到其他适用的名称和方法:

代码语言:javascript
复制
str(tweets[[1]])
Reference class 'status' [package "twitteR"] with 14 fields
 $ text        : chr "<U+062A><U+0639><U+0644><U+0645> <U+0627><U+0644><U+0645><U+0632><U+064A><U+062F> <U+0639><U+0646>  <U+062A><U+062D><U+062F><U+"| __truncated__
 $ favorited   : logi FALSE
 $ replyToSN   : chr(0) 
 $ created     : POSIXct[1:1], format: "2013-06-04 08:02:24"
 $ truncated   : logi FALSE
 $ replyToSID  : chr(0) 
 $ id          : chr "341827259352641536"
 $ replyToUID  : chr(0) 
 $ statusSource: chr "<a href=\"http://www.hootsuite.com\" rel=\"nofollow\">HootSuite</a>"
 $ screenName  : chr "Salim_aeCERT"
 $ retweetCount: num 1
 $ retweeted   : logi FALSE
 $ longitude   : chr(0) 
 $ latitude    : chr(0) 
票数 4
EN

Stack Overflow用户

发布于 2013-06-04 16:43:39

也许可以尝试一下这样的方法:

代码语言:javascript
复制
tweets2.df <- unique(sapply(tweets1.df$tweets, FUN = function(tmp)
    sub(regmatches(tmp,regexpr("^[[:alnum:]*|[:punct:]*]*[:] ",tmp))[[1]],"",tmp)
))

编辑(没有不必要的sapply):

代码语言:javascript
复制
unique(gsub(regmatches(tweets,regexpr("^[[:alnum:]*|[:punct:]*]*[:] ",tweets))[[1]],"",tweets))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16913136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档