14.7.4. Demo: Hide Some Comments#
Now we will use our code from before (with simple fake posts and not real posts), but we will selectively skip displaying some comments. We can make up whatever rule we want for which comments not to show!
First let’s make our fake conversation data:
comment_about_exam = {
'text': 'That last exam sure was hard!',
'replies':[{
'text': 'It sure was hard, what score did you get? ',
'replies': [{
'text': 'I got a 67% :(',
'replies': []
},{
'text': 'I got a 73%',
'replies': []
}]
}, {
'text': 'I didn\'t think it was that bad',
'replies': [{
'text': 'how was that not a super hard exam?',
'replies': []
}, {
'text': 'of course you didn\'t',
'replies': [{
'text': 'what\'s that supposed to mean?',
'replies': [{
'text': 'you\'re an overacheiver',
'replies': [{
'text': 'and that\'s bad how?',
'replies': []
}]
}]
}]
}]
}]
}
Helper function to display text in an indented box#
(You don’t need to worry about how this works. This is that function that helps display posts in indented boxes)
from IPython.display import HTML, Image, display
import html
def display_indented(text, left_margin=0):
display(
HTML(
"<pre style='border:solid 1px;padding:3px;margin-left:"+ str(left_margin) + "px'>" +
html.escape(text) +
"</pre>"
)
)
Display everything#
If we want to display everything, we can use the recursive function from the last section:
def print_comment_and_replies(comment, num_indents=0):
# print indented comment
display_indented(comment['text'], left_margin=num_indents*20)
#print replies (and the replies of those, etc.)
for reply in comment['replies']:
print_comment_and_replies(reply, num_indents = num_indents + 1)
And when we test this out, we can see the result
print_comment_and_replies(comment_about_exam)
That last exam sure was hard!
It sure was hard, what score did you get?
I got a 67% :(
I got a 73%
I didn't think it was that bad
how was that not a super hard exam?
of course you didn't
what's that supposed to mean?
you're an overacheiver
and that's bad how?
Display only some#
If we want to make a rule for what to display, we will first make a new function called should_display
which will look at a comment/reply and return True
if it should be displayed, or False
if it should be hidden.
For our first rule, let’s say we will display all messages that are more than 16 characters long. If a comment/reply is shorter than that, we won’t display it or any of the replies to it.
def should_display(comment):
# only display if the length of the comment text is more than 20 characters long
if(len(comment["text"]) > 20):
return True
else:
return False
Now we will make a new version of our recursive print_comment_and_replies
with an added if
statement that checks whether the should_display
function says if we should display that comment and its replies:
def print_comment_and_replies(comment, num_indents=0):
if(should_display(comment)):
# print indented comment
display_indented(comment['text'], left_margin=num_indents*20)
#print replies (and the replies of those, etc.)
for reply in comment['replies']:
print_comment_and_replies(reply, num_indents = num_indents + 1)
Now let’s test it out and see that fewer of the messages were printed out (only the long ones)
print_comment_and_replies(comment_about_exam)
That last exam sure was hard!
It sure was hard, what score did you get?
I didn't think it was that bad
how was that not a super hard exam?
Making up new rules#
We can make up whatever rules we want for what to display. For example, we might search for offensive words and hide those, or we could hide ones with negative sentiment.
As one more simple example here, we will make a new rule that only displays a message if it got replies (we will assume that if no one bothered to reply, than it isn’t worth displaying).
To make this change we will redefine our should_display
function with the new rule, and then re-run print_comment_and_replies
def should_display(comment):
# only display if there are more than 0 replies
if(len(comment["replies"]) > 0):
return True
else:
return False
print_comment_and_replies(comment_about_exam)
That last exam sure was hard!
It sure was hard, what score did you get?
I didn't think it was that bad
of course you didn't
what's that supposed to mean?
you're an overacheiver