有没有办法限制reddit上特定帖子的评论探索深度。我们有replace_more_comments尝试替换尽可能多的more_comments但我们可以限制此扩展。或者我是否需要在这些评论上编写自己的dfs版本?
由于
答案 0 :(得分:2)
因为你提到replace_more_comments
我假设你在谈论PRAW 3.5。
可悲的是,PRAW不提供comment.depth
形式的信息。它实际上并没有将这些信息保存在任何地方。
如果你想得到一个设定的评论深度,这个评论很低(只有一级和二级评论),那么你可以不用dfs或bfs来做。
submission.replace_more_comments(limit=None,threshold=0)
for top_level_comment in submission.comments:
for second_level_comment in top_level_comment.replies:
print(second_level_comment.body)
如果您想要非固定深度,那么您将拥有自己的实现。但是由于如何设置和从reddit api检索注释,你应该使用bfs而不是dfs。
还有另一种方法,即在PRAW 4.0中使用它(昨天发布)。 Here是我所指的文档的特定部分:
submission.comments.replace_more(limit=0)
comment_queue = submission.comments[:] # Seed with top-level
while comment_queue:
comment = comment_queue.pop(0)
print(comment.body)
comment_queue.extend(comment.replies)
尽管能够进行自己的广度优先遍历真是太棒了,但是CommentForest提供了一个方便的方法list(),它以与上面代码相同的顺序返回遍历的注释列表。因此,上述内容可以改写为:
submission.comments.replace_more(limit=0)
for comment in submission.comments.list():
print(comment.body)
从这里你收到一份评论列表,以便bfs给你。
[first_level_comment, first_level_comment, first_level_comment, second_level_comment,
second_level_comment, third_level_comment, ...]
在这种情况下,基于id和parent_id拆分它们并不复杂。