コード例 #1
0
ファイル: ResumenService.py プロジェクト: rfmorera/mineria_v2
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
    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")
コード例 #5
0
    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
コード例 #6
0
    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)
コード例 #7
0
ファイル: ResumenView.py プロジェクト: rfmorera/mineria_v2
    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")
コード例 #8
0
    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
コード例 #9
0
    def inference_sentiment(cls, ids, inference_enum):
        op_list = OpinionService.get_by_ids(ids)

        return cls.inference_sentiment(op_list, inference_enum)