def analyse_entry(self, entry, params): txt = entry.get("text", None) model = "general" # 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' } try: r = requests.post(api, params=parameters, timeout=3) except requests.exceptions.Timeout: raise Error("Meaning Cloud API does not response") api_response = r.json() if not api_response.get('score_tag'): raise Error(r.json()) logger.info(api_response) response = Results() agg_polarity, agg_polarityValue = self._polarity( api_response.get('score_tag', None)) agg_opinion = Sentiment(id="Opinion0", marl__hasPolarity=agg_polarity, marl__polarityValue=agg_polarityValue, marl__opinionCount=len( api_response['sentence_list'])) entry.sentiments.append(agg_opinion) logger.info(api_response['sentence_list']) count = 1 for sentence in api_response['sentence_list']: for nopinion in sentence['segment_list']: logger.info(nopinion) polarity, polarityValue = self._polarity( nopinion.get('score_tag', None)) opinion = Sentiment( id="Opinion{}".format(count), marl__hasPolarity=polarity, marl__polarityValue=polarityValue, marl__aggregatesOpinion=agg_opinion.get('id'), nif__anchorOf=nopinion.get('text', None), nif__beginIndex=nopinion.get('inip', None), nif__endIndex=nopinion.get('endp', None)) count += 1 entry.sentiments.append(opinion) yield entry
def analyse_entry(self, entry, activity): params = activity.params txt = entry['nif:isString'] api = 'http://api.meaningcloud.com/' lang = params.get("language") model = "general" key = params["apikey"] parameters = { 'key': key, 'model': model, 'lang': lang, 'of': 'json', 'txt': txt, 'tt': 'a' } try: r = requests.post(api + "sentiment-2.1", params=parameters, timeout=3) parameters['lang'] = r.json()['model'].split('_')[1] lang = parameters['lang'] r2 = requests.post(api + "topics-2.0", params=parameters, timeout=3) except requests.exceptions.Timeout: raise Error("Meaning Cloud API does not response") api_response = r.json() api_response_topics = r2.json() if not api_response.get('score_tag'): raise Error(r.json()) entry['language_detected'] = lang self.log.debug(api_response) agg_polarity, agg_polarityValue = self._polarity( api_response.get('score_tag', None)) agg_opinion = Sentiment(id="Opinion0", marl__hasPolarity=agg_polarity, marl__polarityValue=agg_polarityValue, marl__opinionCount=len( api_response['sentence_list'])) agg_opinion.prov(self) entry.sentiments.append(agg_opinion) self.log.debug(api_response['sentence_list']) count = 1 for sentence in api_response['sentence_list']: for nopinion in sentence['segment_list']: self.log.debug(nopinion) polarity, polarityValue = self._polarity( nopinion.get('score_tag', None)) opinion = Sentiment( id="Opinion{}".format(count), marl__hasPolarity=polarity, marl__polarityValue=polarityValue, marl__aggregatesOpinion=agg_opinion.get('id'), nif__anchorOf=nopinion.get('text', None), nif__beginIndex=int(nopinion.get('inip', None)), nif__endIndex=int(nopinion.get('endp', None))) count += 1 opinion.prov(self) entry.sentiments.append(opinion) mapper = { 'es': 'es.', 'en': '', 'ca': 'es.', 'it': 'it.', 'fr': 'fr.', 'pt': 'pt.' } for sent_entity in api_response_topics['entity_list']: resource = "_".join(sent_entity.get('form', None).split()) entity = Entity( id="Entity{}".format(sent_entity.get('id')), itsrdf__taIdentRef="http://{}dbpedia.org/resource/{}".format( mapper[lang], resource), nif__anchorOf=sent_entity.get('form', None), nif__beginIndex=int(sent_entity['variant_list'][0].get( 'inip', None)), nif__endIndex=int(sent_entity['variant_list'][0].get( 'endp', None))) sementity = sent_entity['sementity'].get('type', None).split(">")[-1] entity['@type'] = "ODENTITY_{}".format(sementity) entity.prov(self) if 'senpy:hasEntity' not in entry: entry['senpy:hasEntity'] = [] entry['senpy:hasEntity'].append(entity) for topic in api_response_topics['concept_list']: if 'semtheme_list' in topic: for theme in topic['semtheme_list']: concept = Topic() concept.id = "Topic{}".format(topic.get('id')) concept['@type'] = "ODTHEME_{}".format( theme['type'].split(">")[-1]) concept[ 'fam:topic-reference'] = "http://dbpedia.org/resource/{}".format( theme['type'].split('>')[-1]) entry.prov(self) if 'senpy:hasTopic' not in entry: entry['senpy:hasTopic'] = [] entry['senpy:hasTopic'].append(concept) yield entry