| 849 | print "pattern.text.avg" |
| 850 | |
| 851 | def test_sentiment(self): |
| 852 | # Assert < 0 for negative adjectives and > 0 for positive adjectives. |
| 853 | self.assertTrue(en.sentiment("wonderful")[0] > 0) |
| 854 | self.assertTrue(en.sentiment("horrible")[0] < 0) |
| 855 | self.assertTrue(en.sentiment(en.wordnet.synsets("horrible", pos="JJ")[0])[0] < 0) |
| 856 | self.assertTrue(en.sentiment(en.Text(en.parse("A bad book. Really horrible.")))[0] < 0) |
| 857 | # Assert that :) and :( are recognized. |
| 858 | self.assertTrue(en.sentiment(":)")[0] > 0) |
| 859 | self.assertTrue(en.sentiment(":(")[0] < 0) |
| 860 | # Assert the accuracy of the sentiment analysis (for the positive class). |
| 861 | # Given are the scores for Pang & Lee's polarity dataset v2.0: |
| 862 | # http://www.cs.cornell.edu/people/pabo/movie-review-data/ |
| 863 | # The baseline should increase (not decrease) when the algorithm is modified. |
| 864 | from pattern.db import Datasheet |
| 865 | from pattern.metrics import test |
| 866 | reviews = [] |
| 867 | for score, review in Datasheet.load(os.path.join(PATH, "corpora", "polarity-en-pang&lee1.csv")): |
| 868 | reviews.append((review, int(score) > 0)) |
| 869 | A, P, R, F = test(lambda review: en.positive(review), reviews) |
| 870 | #print A, P, R, F |
| 871 | self.assertTrue(A > 0.741) |
| 872 | self.assertTrue(P > 0.750) |
| 873 | self.assertTrue(R > 0.722) |
| 874 | self.assertTrue(F > 0.736) |
| 875 | # Assert the accuracy of the sentiment analysis on short text (for the positive class). |
| 876 | # Given are the scores for Pang & Lee's sentence polarity dataset v1.0: |
| 877 | # http://www.cs.cornell.edu/people/pabo/movie-review-data/ |
| 878 | reviews = [] |
| 879 | for score, review in Datasheet.load(os.path.join(PATH, "corpora", "polarity-en-pang&lee2.csv")): |
| 880 | reviews.append((review, int(score) > 0)) |
| 881 | A, P, R, F = test(lambda review: en.positive(review), reviews) |
| 882 | #print A, P, R, F |
| 883 | self.assertTrue(A > 0.646) |
| 884 | self.assertTrue(P > 0.657) |
| 885 | self.assertTrue(R > 0.613) |
| 886 | self.assertTrue(F > 0.634) |
| 887 | print "pattern.en.sentiment()" |
| 888 | |
| 889 | def test_sentiment_twitter(self): |
| 890 | sanders = os.path.join(PATH, "corpora", "polarity-en-sanders.csv") |