【问题标题】:How to find non-retweets in a MongoDB collection of tweets?如何在 MongoDB 推文集合中找到非转推?
【发布时间】:2017-11-09 14:20:53
【问题描述】:

我在 MongoDB 集合中收集了大约 140 万条推文。我想找到所有不是转推的,并且正在使用 Python。一个文档的结构如下:

{
  '_id': ObjectId('59388c046b0c1901172555b9'), 
  'coordinates': None, 
  'created_at': datetime.datetime(2016, 8, 18, 17, 17, 12),
  'geo': None,
  'is_quote': False,
  'lang': 'en',
  'text': b'Adam Cole Praises Kevin Owens + A Preview For Next Week\xe2\x80\x99s',
  'tw_id': 766323071976247296,
  'user_id': 2231233110,
  'user_lang': 'en',
  'user_loc': 'main; @Kan1shk3',
  'user_name': 'sheezy0',
  'user_timezone': 'Chennai'
}

我可以编写一个查询来从上面找到特定的推文:

twitter_mongo_collection.find_one({
  'text': b'Adam Cole Praises Kevin Owens + A Preview For Next Week\xe2\x80\x99s'
})

但是当我尝试查找转推时,我的代码不起作用,例如我尝试查找任何以这样开头的推文:

'text': b'RT some tweet'

使用这个查询:

find_one( {'text': {'$regex': "/^RT/" } }  )

它不会返回错误,但它没有找到任何东西。我怀疑这与正文开始之前开头的“b”有关。我知道我还需要在某处放 '$not:' 但不确定在哪里。

谢谢!

【问题讨论】:

  • 我忘了提到我也试过这个:regx = re.compile("^RT") twitter_mongo_collection.find_one({"text": regx}) 它没有返回任何东西。
  • 当使用带有“字符串”的$regex 时,您不包含斜杠,因此{ '$regex': '^RT' } 是正确的语法。不过,re.compile 的用法也应该是正确的。你至少能确定一份你认为“应该匹配”的文件吗?显示这可能指向问题。
  • 谢谢!它仍然不适用于删除斜线。应该匹配的文档是:'text': b'RT @hewittsprints:可订购专业、个性化、设计和打印服务卡'。我不确定“b”是什么,但由于我的其他搜索查询需要它来工作,我假设它在这里也很重要,我只是不知道如何包含它。
  • 这意味着它是一个字节字符串文字。我不“认为”它应该有效果。如果它实际上不是真正的开始,那么只测试"RT"(作为测试)怎么样,所以从正则表达式中删除锚点。我还认为 Twitter 提要实际上具有“转发”的布尔值,它可能已从您的数据中删除,但确实应该存在,因为这比正则表达式更好。
  • 可能是re.compile(b'^RT')?取自Regular expression parsing a binary file?

标签: python regex mongodb twitter


【解决方案1】:

您的正则表达式搜索似乎正在尝试匹配字符串
b'RT'
但你想匹配像
b'RT some text afterwards'

这样的字符串

尝试改用这个正则表达式
find_one( {'text': {'$regex': "/^RT.*/" } } )

【讨论】:

    【解决方案2】:

    我必须对编码为二进制的“文本”字段进行解码。然后我就可以使用了

    twitter_mongo_collection.find_one( { {'text': { '$not': re.compile("^RT.*") } })

    查找所有不以“RT”开头的文档。

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 2015-11-20
      • 2019-05-10
      • 2017-06-27
      • 2019-04-20
      • 1970-01-01
      • 2016-05-16
      • 2011-09-11
      • 1970-01-01
      相关资源
      最近更新 更多