使用twitteR时不包括twitter句柄

时间:2016-02-01 11:18:42

标签: r twitter

在使用R中的twitteR软件包分析#flipkart上的推文时,大多数推文都是关于优惠的新闻,大约有2-3个句柄。这无助于评估关于flipkart的整体情绪。我可以在提取推文时排除这2-3个句柄吗?我需要客户回复,而不是新闻。 感谢

1 个答案:

答案 0 :(得分:1)

这只是一个提示,而不是一个完整的解决方案(我认为这不可行)。然而,评论的时间太长了。

查看twitter api文档,如何搜索,query operators段。如果您将-添加到术语中,则会将其从查询中排除。

只需在您的搜索查询中转换为twitteR,如下所示:

searchTwitter("#flipkart -pricetrak", n=10)

您可以尝试排除某些条款,但这不是一件容易的事。

此外,你不应该这样做,例如#flipkart -@flipkart,因为大多数客户的评论似乎都是针对用户@flipkart的,并且您会将其丢失。 (搜索查询的条款被解释为用户或推文的内容。)

最后一点,您的搜索查询中最多只能有500个字符。

希望它有所帮助。

<强>更新

根据评论,我提出了一些你可以采取的其他简单行动。但我担心没有“魔弹”,你应该玩数据并进行大量的试验。另外,重要的是要注意twitteR库,虽然它非常有用,但在做更多“高级”的东西时使用起来有点棘手(实际上每个twitter库都有点像我的经验,并且有时你最终需要直接访问Twitter REST API;在某种程度上它是有道理的,因为库使得常见任务非常简单,比如获取推文,但对其他任务来说不一定容易)。

  1. 从某些用户或经过验证的用户中删除推文
  2. 这是一个玩具示例,说明如何访问发送推文的用户:

    tweets = searchTwitter("#flipkart -pricetrak", n=10)
    
    for (tweet in tweets) {
      screenName <- as.data.frame(tweet)$screenName
      print(screenName)
      tuser <- getUser(screenName)
      verified <- as.data.frame(tuser)$verified
      print(verified)
    }
    

    通过这种方式,您可以过滤来自@flipkart的推文,或者来自您知道不是客户的用户列表。此外,您可以假设客户通常不是经过验证的用户(有关已验证帐户的详细信息,请参阅here),只需过滤推文即可。

    1. 跳过其文字中包含链接的推文
    2. 客户在其推文中发送链接会很奇怪(当然现在不可能)。您可以用类似的方式过滤它们:

      for (tweet in tweets) {
        text <- as.data.frame(tweet)$text
        print(text)
        print(length(strsplit(text, "https://")[[1]]))
      }
      

      (当然,如果strsplit的长度为1,则推文文本中没有链接。)

      通过这种方式,您将过滤一些实际来自真实客户的推文,但我认为这可以轻松过滤包含优惠或交易的大部分推文(所有包括链接)。

      希望它有用。

      更新2

      评论后,代码的改进版本

      data <- NULL
      ads <- NULL
      for (tweet in tweets) {
        tweet_df <- as.data.frame(tweet)
        screenName <- tweet_df$screenName
        tuser <- getUser(screenName)
        verified <- as.data.frame(tuser)$verified
        print(verified)
        if (verified == TRUE) {
          ads <- rbind(ads, tweet_df)    
        } else {
          data <- rbind(data, tweet_df)    
        }
      }
      if (! is.null(ads)) {
        write.table(ads, file = "ads.csv", append=TRUE, col.names=FALSE)
      }
      if (! is.null(data)) {
        write.table(data, file = "data.csv", append=TRUE, col.names=FALSE)
      }