| import unittest |
| from src.aspect_sentiment.diarization import TranscriptTurn |
| from src.aspect_sentiment.sentiment_timeline import ( |
| compute_turn_sentiment, |
| map_sentiment_label, |
| compute_sentiment_timeline, |
| ) |
|
|
| class SentimentTimelineTests(unittest.TestCase): |
| def test_sentiment_label_mapping(self): |
| |
| t1 = "I am ready to buy this laptop right now. Confirm the order." |
| score1 = compute_turn_sentiment(t1) |
| self.assertEqual(map_sentiment_label(t1, score1), "Ready To Buy") |
| |
| |
| t2 = "I am looking for a device with good battery and performance." |
| score2 = compute_turn_sentiment(t2) |
| self.assertEqual(map_sentiment_label(t2, score2), "Interested") |
| |
| |
| t3 = "This is too expensive and I am disappointed with your delivery delay." |
| score3 = compute_turn_sentiment(t3) |
| self.assertEqual(map_sentiment_label(t3, score3), "Frustrated") |
| |
| |
| t4 = "This is a great option. Thank you!" |
| score4 = compute_turn_sentiment(t4) |
| self.assertEqual(map_sentiment_label(t4, score4), "Positive") |
| |
| |
| t5 = "The laptop has 16GB RAM and 512GB SSD." |
| score5 = compute_turn_sentiment(t5) |
| self.assertEqual(map_sentiment_label(t5, score5), "Neutral") |
|
|
| def test_sentiment_timeline_generation(self): |
| turns = [ |
| TranscriptTurn(speaker="Agent", text="This is a test call for the system.", start=0.0, end=2.0), |
| TranscriptTurn(speaker="Customer", text="I want to buy a gaming laptop but I am frustrated with prices.", start=2.5, end=6.0), |
| TranscriptTurn(speaker="Agent", text="I understand. We can offer you EMI options and a 10% discount.", start=6.5, end=10.0), |
| TranscriptTurn(speaker="Customer", text="Oh that is perfect, I am very interested now and ready to buy!", start=10.5, end=14.0), |
| ] |
| |
| timeline = compute_sentiment_timeline(turns) |
| |
| |
| self.assertEqual(len(timeline["turns"]), 4) |
| |
| |
| self.assertEqual(timeline["turns"][0]["sentimentLabel"], "Neutral") |
| self.assertEqual(timeline["turns"][1]["sentimentLabel"], "Frustrated") |
| self.assertEqual(timeline["turns"][3]["sentimentLabel"], "Ready To Buy") |
| |
| |
| self.assertGreater(timeline["summary"]["transitionCount"], 0) |
| self.assertEqual(timeline["summary"]["startLabel"], "Neutral") |
| self.assertEqual(timeline["summary"]["endLabel"], "Ready To Buy") |
| self.assertEqual(timeline["summary"]["trend"], "Improving") |
| self.assertGreater(timeline["summary"]["curveConfidence"], 0.0) |
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|