def summarize_by_ids(cls, ids, opinion_type, ratio=0.3, words=None, keywords_words=None): if opinion_type: op_list = OpinionService.get_by_ids(ids) else: op_list = EntradaService.get_by_ids(ids) for op in op_list: op.resumen = summarizer.summarize(op.content, language='spanish', ratio=ratio, words=words) op.keywords = keywords.keywords(op.content, language='spanish', split=True, ratio=ratio, words=keywords_words) if op.keywords == "": op.keywords = "Opss!! No ha sido posible extraer palabras claves." if op.resumen == "": op.resumen = "El texto es breve o no se ha podido generar un resumen. Lo sentimos." OpinionService.save_opinions(op_list) return op_list
def inference_sentiment(cls, ids, inference_enum): op_list = OpinionService.get_by_ids(ids) sent_list = [] if inference_enum == InferenceModelsEnum.FastText: sent_list = FastTextPrediction.predict(op_list) sent_list = cls.save_sentiment(sent_list) for i, op in enumerate(op_list): op.sentiment = sent_list[i] OpinionService.save_opinions(op_list) return op_list
def summarize_by_ids(cls, ids): op_list = OpinionService.get_by_ids(ids) for op in op_list: op.resumen = summarizer.summarize(op.raw_content, language='spanish', ratio=0.3) op.keywords = keywords.keywords(op.raw_content, language='spanish') if op.keywords == "": op.keywords = "Opss!! No ha sido posible extraer palabras claves." if op.resumen == "": op.resumen = "El texto es breve o no se ha podido generar un resumen. Lo sentimos." OpinionService.save_opinions(op_list) return op_list
def get(self, request): """Devuelve el de las opiniones""" data = request.data if 'ids' in data.keys(): ids = data['ids'] summa_list = OpinionService.get_by_ids(ids) serializer = OpinionSummarySerializer(summa_list, many=True) return Response(serializer.data) else: raise AttributeError("Falta el parámetro Ids o está vacio")
def inference_sentiment_from_opinions(cls, op_list, inference_enum=None): if len(op_list) == 0: return [] done = [] pending = [] for op in op_list: if op.sentiment is None: pending.append(op) else: done.append(op) sentiment_pending = cls._inference_sentiment(pending, inference_enum) for i, op in enumerate(pending): op.sentiment = sentiment_pending[i] OpinionService.save_opinions(pending) done.extend(pending) return done
def post(self, request): """Inserta las opiniones""" data = request.data opinions_raw = [Opinion(raw_content=r) for r in data] opinions = PreprocessorService.preprocess(opinions_raw) opinions_saved = OpinionService.save_opinions(opinions) op_ids = [str(op.id) for op in opinions_saved] content = {"ids": op_ids} return Response(content)
def get(self, request): """Devuelve el de las opiniones""" data = request.data opinion_type = True if 'type' in data.keys() and data["type"] == "entrada": opinion_type = False if 'ids' in data.keys(): ids = data['ids'] if opinion_type: summa_list = OpinionService.get_by_ids(ids) else: summa_list = EntradaService.get_by_ids(ids) serializer = OpinionSummarySerializer(summa_list, many=True) return Response(serializer.data) else: raise AttributeError("Falta el parámetro Ids o está vacio")
def _build_report(cls, param_id, entradas_id, entidades, start_date, end_date, save): opinions = OpinionService.get_between_dates(entradas_id, entidades, start_date, end_date) opinions = cls.inference_sentiment_from_opinions(opinions) tot = len(opinions) pos = neg = 1 # to avoid division by zero neu = 0 for r in opinions: if r.sentiment is None: continue if r.sentiment.sentiment == 'POSITIVE': pos += 1 elif r.sentiment.sentiment == 'NEGATIVE': neg += 1 elif r.sentiment.sentiment == 'NEUTRAL': neu += 1 ratio = cls.__calc_ratio(pos, neg) pos -= 1 neg -= 1 rep = ReportDSentiment(report_param=param_id, fecha_inicio=start_date, fecha_fin=end_date, total_opinion=tot, total_positive=pos, total_negative=neg, total_neutral=neu, ratio=round(ratio, 2)) if save: rep.save() return rep
def inference_sentiment(cls, ids, inference_enum): op_list = OpinionService.get_by_ids(ids) return cls.inference_sentiment(op_list, inference_enum)