diff --git a/affect/affect.py b/affect/affect.py index 5356c74..2b47317 100644 --- a/affect/affect.py +++ b/affect/affect.py @@ -19,7 +19,7 @@ class unifiedPlugin(SentimentPlugin): def deactivate(self, *args, **kwargs): - self.close() + self.save() def analyse(self, **kwargs): diff --git a/emotion-wnaffect/emotion-wnaffect.py b/emotion-wnaffect/emotion-wnaffect.py index 93c5f52..7bf305c 100644 --- a/emotion-wnaffect/emotion-wnaffect.py +++ b/emotion-wnaffect/emotion-wnaffect.py @@ -15,7 +15,6 @@ from pattern.en import parse from senpy.plugins import EmotionPlugin, SenpyPlugin, ShelfMixin from senpy.models import Results, EmotionSet, Entry, Emotion -logger = logging.getLogger(__name__) class EmotionTextPlugin(EmotionPlugin, ShelfMixin): @@ -67,27 +66,25 @@ class EmotionTextPlugin(EmotionPlugin, ShelfMixin): 'sadness': 'sadness'} - self._load_emotions(self._info['hierarchy_path']) + self._load_emotions(self.hierarchy_path) if 'total_synsets' not in self.sh: - total_synsets = self._load_synsets(self._info['synsets_path']) + total_synsets = self._load_synsets(self.synsets_path) self.sh['total_synsets'] = total_synsets self._total_synsets = self.sh['total_synsets'] if 'wn16' not in self.sh: - self._wn16_path = self._info['wn16_path'] + self._wn16_path = self.wn16_path wn16 = WordNetCorpusReader(os.path.abspath("{0}".format(self._wn16_path)), nltk.data.find(self._wn16_path)) self.sh['wn16'] = wn16 self._wn16 = self.sh['wn16'] - logger.info("EmoText plugin is ready to go!") def deactivate(self, *args, **kwargs): self.save() - logger.info("EmoText plugin is being deactivated...") def _my_preprocessor(self, text): @@ -166,11 +163,9 @@ class EmotionTextPlugin(EmotionPlugin, ShelfMixin): return feature_set - def analyse(self, **params): + def analyse_entry(self, entry, params): - logger.debug("Analysing with params {}".format(params)) - - text_input = params.get("input", None) + text_input = entry.get("text", None) text=self._my_preprocessor(text_input) @@ -178,8 +173,6 @@ class EmotionTextPlugin(EmotionPlugin, ShelfMixin): response = Results() - entry = Entry(id="Entry", - text=text_input) emotionSet = EmotionSet(id="Emotions0") emotions = emotionSet.onyx__hasEmotion @@ -188,5 +181,5 @@ class EmotionTextPlugin(EmotionPlugin, ShelfMixin): onyx__hasEmotionIntensity=feature_text[i])) entry.emotions = [emotionSet] - response.entries.append(entry) - return response + + yield entry \ No newline at end of file diff --git a/emotion-wnaffect/emotion-wnaffect.senpy b/emotion-wnaffect/emotion-wnaffect.senpy index fb38f6f..3ad278b 100644 --- a/emotion-wnaffect/emotion-wnaffect.senpy +++ b/emotion-wnaffect/emotion-wnaffect.senpy @@ -8,23 +8,16 @@ "language": { "aliases": ["language", "l"], "required": true, - "options": ["en"], "default": "en" } }, - "requirements": {}, - "synsets_path": "/senpy-plugins-data/emotion-wnaffect/a-synsets.xml", - "hierarchy_path": "/senpy-plugins-data/emotion-wnaffect/a-hierarchy.xml", - "wn16_path": "/senpy-plugins-data/emotion-wnaffect/wordnet1.6/dict", + "synsets_path": "/data/emotion-wnaffect/a-synsets.xml", + "hierarchy_path": "/data/emotion-wnaffect/a-hierarchy.xml", + "wn16_path": "/data/emotion-wnaffect/wordnet1.6/dict", + "onyx:usesEmotionModel": "emoml:big6", "requirements": [ "nltk>=3.0.5", - "numpy>=1.8.2", - "scipy>=0.14.0", - "scikit-learn>=0.14.1", "lxml>=3.4.2", - "pandas", - "senpy", "pattern", - "textblob" ] } diff --git a/example-plugin/example.py b/example-plugin/example.py index 86a1651..4e5f293 100644 --- a/example-plugin/example.py +++ b/example-plugin/example.py @@ -7,11 +7,6 @@ logger = logging.getLogger(__name__) class ExamplePlugin(SentimentPlugin): - def __init__(self, *args, **kwargs): - super(ExamplePlugin, self).__init__(*args, **kwargs) - logger.warn('%s: the answer to life, the universe and everything' - % self._info.get('custom_attribute')) - def analyse(self, *args, **kwargs): logger.warn('Analysing with the example.') logger.warn('The answer to this response is: %s.' % kwargs['parameter']) diff --git a/sentiment-140/sentiment-140.py b/sentiment-140/sentiment-140.py index ad9704a..c7b08fe 100644 --- a/sentiment-140/sentiment-140.py +++ b/sentiment-140/sentiment-140.py @@ -6,17 +6,19 @@ from senpy.models import Results, Sentiment, Entry class Sentiment140Plugin(SentimentPlugin): - def analyse(self, **params): + + def analyse(self,entry,params): + lang = params.get("language", "auto") res = requests.post("http://www.sentiment140.com/api/bulkClassifyJson", json.dumps({"language": lang, - "data": [{"text": params["input"]}] + "data": [{"text": entry.get("text",None)}] } ) ) p = params.get("prefix", None) - response = Results(prefix=p) + polarity_value = self.maxPolarityValue*int(res.json()["data"][0] ["polarity"]) * 0.25 polarity = "marl:Neutral" @@ -25,16 +27,10 @@ class Sentiment140Plugin(SentimentPlugin): polarity = "marl:Positive" elif polarity_value < neutral_value: polarity = "marl:Negative" - - entry = Entry(id="Entry0", - nif__isString=params["input"]) sentiment = Sentiment(id="Sentiment0", prefix=p, marl__hasPolarity=polarity, marl__polarityValue=polarity_value) - sentiment.prov__wasGeneratedBy = self.id - entry.sentiments = [] entry.sentiments.append(sentiment) - entry.language = lang - response.entries.append(entry) - return response + + yield entry \ No newline at end of file diff --git a/sentiment-basic/sentiment-basic.py b/sentiment-basic/sentiment-basic.py index 903dbeb..6676612 100644 --- a/sentiment-basic/sentiment-basic.py +++ b/sentiment-basic/sentiment-basic.py @@ -13,24 +13,16 @@ from os import path from senpy.plugins import SentimentPlugin, SenpyPlugin from senpy.models import Results, Entry, Sentiment -logger = logging.getLogger(__name__) class SentiTextPlugin(SentimentPlugin): - def __init__(self, info, *args, **kwargs): - super(SentiTextPlugin, self).__init__(info, *args, **kwargs) - self.id = info['module'] - base = path.abspath(path.dirname(__file__)) - self.swn_path = path.join(base, info['sentiword_path']) - self.pos_path = path.join(base, info['pos_path']) - self._swn = None - self._pos_tagger = None - def _load_swn(self): + self.swn_path = path.join(path.abspath(path.dirname(__file__)), self.sentiword_path) swn = SentiWordNet(self.swn_path) return swn def _load_pos_tagger(self): + self.pos_path = path.join(path.abspath(path.dirname(__file__)), self.pos_path) with open(self.pos_path, 'r') as f: tagger = pickle.load(f) return tagger @@ -38,12 +30,6 @@ class SentiTextPlugin(SentimentPlugin): def activate(self, *args, **kwargs): self._swn = self._load_swn() self._pos_tagger = self._load_pos_tagger() - logger.info("SentiText plugin is ready to go!") - - def deactivate(self, *args, **kwargs): - logger.info("SentiText plugin is being deactivated...") - - def _remove_punctuation(self, tokens): return [t for t in tokens if t not in string.punctuation] @@ -80,10 +66,9 @@ class SentiTextPlugin(SentimentPlugin): return None - def analyse(self, **params): - logger.debug("Analysing with params {}".format(params)) + def analyse_entry(self, entry, params): - text = params.get("input", None) + text = entry.get("text", None) tokens = self._tokenize(text) tokens = self._pos(tokens) @@ -95,7 +80,6 @@ class SentiTextPlugin(SentimentPlugin): if len(lemmas) == 0: continue tokens[i]['lemmas'][w[0]] = lemmas - logger.debug("Tokens: {}".format(tokens)) trans = TextBlob(unicode(text)).translate(from_lang='es',to='en') useful_synsets = {} @@ -107,7 +91,6 @@ class SentiTextPlugin(SentimentPlugin): continue eq_synset = self._compare_synsets(synsets, tokens, s_i) useful_synsets[s_i][t_w] = eq_synset - logger.debug("Synsets used for analysis: {}".format(useful_synsets)) scores = {} for i in tokens: @@ -128,12 +111,10 @@ class SentiTextPlugin(SentimentPlugin): score['score'] = f_score scores[i][word] = score break - logger.debug("All scores (some not used): {}".format(scores)) lang = params.get("language", "auto") p = params.get("prefix", None) - response = Results() for i in scores: n_pos = 0.0 @@ -158,17 +139,11 @@ class SentiTextPlugin(SentimentPlugin): elif g_score < 0.5: polarity = 'marl:Negative' - entry = Entry(id="Entry"+str(i), - nif_isString=tokens[i]['sentence']) - opinion = Sentiment(id="Opinion0"+'_'+str(i), marl__hasPolarity=polarity, marL__polarityValue=float("{0:.2f}".format(g_score))) - opinion["prov:wasGeneratedBy"] = self.id - entry.sentiments = [] entry.sentiments.append(opinion) - entry.language = lang - response.entries.append(entry) - return response + + yield entry \ No newline at end of file diff --git a/sentiment-basic/sentiment-basic.senpy b/sentiment-basic/sentiment-basic.senpy index b0a6717..3868eef 100644 --- a/sentiment-basic/sentiment-basic.senpy +++ b/sentiment-basic/sentiment-basic.senpy @@ -12,7 +12,11 @@ "default": "es" } }, - "requirements": {}, + "requirements": [ + "nltk>=3.0.5", + "scipy>=0.14.0", + "textblob" + ], "sentiword_path": "SentiWordNet_3.0.txt", "pos_path": "unigram_spanish.pickle" } diff --git a/sentiment-meaningCloud/sentiment-meaningCloud.py b/sentiment-meaningCloud/sentiment-meaningCloud.py index 6b3bda8..3ef9f59 100644 --- a/sentiment-meaningCloud/sentiment-meaningCloud.py +++ b/sentiment-meaningCloud/sentiment-meaningCloud.py @@ -10,23 +10,15 @@ from senpy.models import Results, Entry, Sentiment,Error class DaedalusPlugin(SentimentPlugin): - def activate(self, *args, **kwargs): - pass + def analyse_entry(self, entry, params): - def deactivate(self, *args, **kwargs): - self.close() - - - def analyse(self, **params): - - txt = params["input"] + txt = entry.get("text",None) model = params["model"] # general_es / general_es / general_fr api = 'http://api.meaningcloud.com/sentiment-2.1' lang = params.get("language") key = params["apiKey"] parameters = {'key': key,'model': model,'lang': lang,'of': 'json','txt': txt,'src': 'its-not-a-real-python-sdk'} r = requests.post(api, params=parameters) - print(r.text) value = r.json().get('score_tag', None) if not value: @@ -42,10 +34,8 @@ class DaedalusPlugin(SentimentPlugin): elif 'P' in value: polarity = 'marl:Positive' polarityValue = 1 - entry = Entry(id="Entry0",nif_isString=txt) + opinion = Sentiment(id="Opinion0",marl__hasPolarity=polarity,marl__polarityValue = polarityValue) - opinion["prov:wasGeneratedBy"] = self.id - entry.sentiments = [] entry.sentiments.append(opinion) - response.entries.append(entry) - return response + + yield entry \ No newline at end of file