Bird
Raised Fist0
NLPml~10 mins

Sentiment with context (sarcasm, negation) in NLP - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to load the text data for sentiment analysis.

NLP
texts = ["I love this movie!", "This is not good.", "Absolutely fantastic!"]
labels = [1, 0, 1]

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.[1](texts)
Drag options to blanks, or click blank then click option'
Atransform
Bfit_transform
Cfit
Dtoarray
Attempts:
3 left
💡 Hint
Common Mistakes
Using transform before fitting the vectorizer.
Using fit without transforming the texts.
2fill in blank
medium

Complete the code to train a logistic regression model for sentiment classification.

NLP
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.[1](X, labels)
Drag options to blanks, or click blank then click option'
Afit
Bscore
Cpredict
Dtransform
Attempts:
3 left
💡 Hint
Common Mistakes
Using predict before training the model.
Using transform which is not a model method.
3fill in blank
hard

Fix the error in the code to correctly predict sentiment for new texts.

NLP
new_texts = ["I don't like this.", "What a great day!"]
X_new = vectorizer.[1](new_texts)
predictions = model.predict(X_new)
Drag options to blanks, or click blank then click option'
Afit_transform
Bpredict
Ctransform
Dfit
Attempts:
3 left
💡 Hint
Common Mistakes
Using fit_transform on new data which changes the vocabulary.
Using fit which does not return transformed data.
4fill in blank
hard

Fill both blanks to create a function that detects negation words and adjusts sentiment accordingly.

NLP
def adjust_for_negation(text, sentiment):
    negations = ['not', 'no', 'never', 'none']
    words = text.lower().split()
    if any(word [1] negations for word in words):
        return 1 [2] sentiment
    return sentiment
Drag options to blanks, or click blank then click option'
Ain
Bnot in
C-
D+
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'not in' which checks the opposite condition.
Adding 1 instead of subtracting to flip sentiment.
5fill in blank
hard

Fill all three blanks to build a simple sarcasm detector that flags sarcastic sentences containing 'yeah right' or 'as if'.

NLP
def detect_sarcasm(text):
    sarcasm_phrases = [[1], [2]]
    text_lower = text.lower()
    for phrase in sarcasm_phrases:
        if phrase [3] text_lower:
            return True
    return False
Drag options to blanks, or click blank then click option'
A"yeah right"
B"as if"
Cin
Dnot in
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'not in' which checks the opposite condition.
Not quoting the sarcasm phrases as strings.

Practice

(1/5)
1. What effect does the word not usually have on sentiment in a sentence?
easy
A. It makes the sentence neutral
B. It always makes the sentence positive
C. It has no effect on sentiment
D. It reverses the sentiment of the following phrase

Solution

  1. Step 1: Understand negation in sentiment

    The word not is a negation word that flips the meaning of the phrase it modifies.
  2. Step 2: Apply to sentiment analysis

    If a phrase is positive, adding not before it usually makes it negative, and vice versa.
  3. Final Answer:

    It reverses the sentiment of the following phrase -> Option D
  4. Quick Check:

    Negation flips sentiment = A [OK]
Hint: Negation words flip sentiment meaning quickly [OK]
Common Mistakes:
  • Ignoring negation words in sentiment
  • Assuming negation always makes positive
  • Treating negation as neutral
2. Which of the following is the correct way to handle negation in a simple sentiment analysis code snippet?
easy
A. Ignore negation words and analyze sentiment word by word
B. Flip sentiment polarity of words following negation words
C. Treat negation words as positive sentiment
D. Remove negation words before analysis

Solution

  1. Step 1: Identify negation handling in code

    Proper handling means detecting negation words and flipping sentiment of words after them.
  2. Step 2: Evaluate options

    Ignoring or removing negation loses meaning; treating negation as positive is wrong.
  3. Final Answer:

    Flip sentiment polarity of words following negation words -> Option B
  4. Quick Check:

    Flip sentiment after negation = B [OK]
Hint: Flip sentiment after negation words in code [OK]
Common Mistakes:
  • Ignoring negation in code
  • Removing negation words blindly
  • Misclassifying negation as positive
3. Consider this Python code snippet for sentiment scoring with negation handling:
sentence = "I do not like this movie"
words = sentence.split()
sentiment_dict = {"like": 1, "movie": 0}
score = 0
negate = False
for w in words:
    if w == "not":
        negate = True
        continue
    val = sentiment_dict.get(w, 0)
    if negate:
        val = -val
        negate = False
    score += val
print(score)

What is the printed output?
medium
A. -1
B. 0
C. 1
D. 2

Solution

  1. Step 1: Trace the loop and negation flag

    Words: ['I', 'do', 'not', 'like', 'this', 'movie'] - 'not' sets negate=True - Next word 'like' has sentiment 1, negated to -1 - 'movie' sentiment 0, no negation - Other words have 0 sentiment
  2. Step 2: Calculate total score

    Score = -1 (from 'like') + 0 (from 'movie') + 0 (others) = -1
  3. Final Answer:

    -1 -> Option A
  4. Quick Check:

    Negation flips 1 to -1 = A [OK]
Hint: Negation flips next word sentiment once [OK]
Common Mistakes:
  • Not resetting negate flag after one word
  • Ignoring words not in sentiment_dict
  • Assuming negation affects all following words
4. The following code tries to handle negation but gives wrong sentiment scores:
sentence = "I am not happy"
words = sentence.split()
sentiment_dict = {"happy": 1}
score = 0
negate = False
for w in words:
    if w == "not":
        negate = True
    val = sentiment_dict.get(w, 0)
    if negate:
        val = -val
    score += val
print(score)

What is the main bug causing incorrect output?
medium
A. Negation flag is never reset after use
B. Sentiment dictionary missing 'not' key
C. Loop skips words after 'not'
D. Score is not initialized to zero

Solution

  1. Step 1: Analyze negation flag usage

    Negate is set True on 'not' but never reset to False, so all following words are negated.
  2. Step 2: Understand impact on sentiment score

    All words after 'not' get negated, causing wrong total sentiment.
  3. Final Answer:

    Negation flag is never reset after use -> Option A
  4. Quick Check:

    Negate flag reset missing = C [OK]
Hint: Reset negation flag after negating one word [OK]
Common Mistakes:
  • Forgetting to reset negation flag
  • Adding keys unnecessarily to sentiment dict
  • Assuming loop skips words after negation
5. You want to improve a sentiment model to detect sarcasm, which often reverses sentiment meaning. Which approach is best to handle sarcasm in sentiment analysis?
hard
A. Use a simple bag-of-words model ignoring word order
B. Assign fixed positive sentiment to all sarcastic sentences
C. Add a sarcasm detection module using context and tone features
D. Remove all negation words from the text before analysis

Solution

  1. Step 1: Understand sarcasm complexity

    Sarcasm changes sentiment meaning and needs context, tone, or special features beyond simple word counts.
  2. Step 2: Evaluate approaches

    Simple bag-of-words or removing negations lose sarcasm cues; fixed positive sentiment is incorrect.
  3. Final Answer:

    Add a sarcasm detection module using context and tone features -> Option C
  4. Quick Check:

    Sarcasm needs special detection = D [OK]
Hint: Detect sarcasm with context and tone features [OK]
Common Mistakes:
  • Using simple models ignoring sarcasm
  • Removing negation words blindly
  • Assigning fixed sentiment to sarcasm