public bool berekenTrends(int minVoorwaarde, List <Post> posts, Voorwaarde voorwaarde)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 2
0
        public bool berekenTrends(double minVoorwaarde, Entiteit entiteit, TrendType type, Voorwaarde voorwaarde)
        {
            initNonExistingRepo();
            DateTime vandaag  = DateTime.Today;
            DateTime gisteren = DateTime.Today.AddDays(-1);
            //DateTime vandaag = new DateTime(2018, 01, 14);
            //DateTime gisteren = new DateTime(2018, 01, 13);
            List <Post> AllePosts      = entiteit.Posts;
            List <Post> PostsGisteren  = AllePosts.Where(x => x.Date.Day == gisteren.Day).Where(x => x.Date.Month == gisteren.Month).Where(x => x.Date.Year == gisteren.Year).ToList();
            List <Post> PostsVandaag   = AllePosts.Where(x => x.Date.Day == vandaag.Day).Where(x => x.Date.Month == vandaag.Month).Where(x => x.Date.Year == vandaag.Year).ToList();
            int         AantalGisteren = PostsGisteren.Count;
            int         AantalVandaag  = PostsVandaag.Count;
            //We MOETEN entiteit even zelf ophalen zodat de context op de hoogte is van welke entiteit we gebruiken
            Entiteit e                = getAlleEntiteiten().Single(x => x.EntiteitId == entiteit.EntiteitId);
            Trend    newTrend         = new Trend();
            double   trendVerandering = 1.3;

            //controle of trend al bestaat, zoja moeten we de berekening niet maken
            foreach (var trend in e.Trends)
            {
                if (trend.Type == type)
                {
                    return(true);
                }
            }

            //PRESET voor berekening juist zetten
            switch (type)
            {
            case TrendType.STERKOPWAARTS:
                trendVerandering = 1.3;
                newTrend.Type    = TrendType.STERKOPWAARTS;
                break;

            case TrendType.MATIGOPWAARDS:
                trendVerandering = 1.1;
                newTrend.Type    = TrendType.MATIGOPWAARDS;
                break;

            case TrendType.MATIGDALEND:
                trendVerandering = 0.9;
                newTrend.Type    = TrendType.MATIGDALEND;
                break;

            case TrendType.STERKDALEND:
                trendVerandering = 0.7;
                newTrend.Type    = TrendType.STERKDALEND;
                break;
            }


            switch (voorwaarde)
            {
            case Voorwaarde.SENTIMENT:
                double sentimentGisteren = 0;
                double sentimentVandaag  = 0;

                foreach (var post in PostsGisteren)
                {
                    sentimentGisteren += (post.Sentiment.polariteit * post.Sentiment.subjectiviteit) / AantalGisteren;
                }

                foreach (var post in PostsVandaag)
                {
                    sentimentVandaag += (post.Sentiment.polariteit * post.Sentiment.subjectiviteit) / AantalVandaag;
                }
                double sentimentVerschil = 0;

                if (type == TrendType.STIJGEND)
                {
                    sentimentVerschil = sentimentVandaag - sentimentGisteren;
                    if (sentimentVerschil >= minVoorwaarde)
                    {
                        newTrend.Type       = TrendType.STIJGEND;
                        newTrend.Voorwaarde = Voorwaarde.SENTIMENT;
                        entiteit.Trends.Add(newTrend);
                        updateEntiteit(e);
                        return(true);
                    }
                }
                else if (type == TrendType.DALEND)
                {
                    sentimentVerschil   = sentimentGisteren - sentimentVandaag;
                    newTrend.Type       = TrendType.DALEND;
                    newTrend.Voorwaarde = Voorwaarde.SENTIMENT;
                    entiteit.Trends.Add(newTrend);
                    updateEntiteit(e);
                    return(true);
                }
                break;

            case Voorwaarde.AANTALVERMELDINGEN:
                newTrend.Voorwaarde = Voorwaarde.AANTALVERMELDINGEN;
                if (type == TrendType.DALEND)
                {
                    if ((AantalGisteren - AantalVandaag) >= minVoorwaarde)
                    {
                        return(true);
                    }
                }
                if (type == TrendType.STIJGEND)
                {
                    if ((AantalVandaag - AantalGisteren) >= minVoorwaarde)
                    {
                        return(true);
                    }
                }
                if (type == TrendType.STERKOPWAARTS)
                {
                    if ((AantalVandaag / AantalGisteren) >= trendVerandering)
                    {
                        if (entiteit.Trends == null)
                        {
                            entiteit.Trends = new List <Trend>();
                        }
                        entiteit.Trends.Add(newTrend);
                        updateEntiteit(e);
                        return(true);
                    }
                }
                if (type == TrendType.STERKDALEND)
                {
                    if ((AantalVandaag / AantalGisteren) <= trendVerandering)
                    {
                        if (entiteit.Trends == null)
                        {
                            entiteit.Trends = new List <Trend>();
                        }
                        entiteit.Trends.Add(newTrend);
                        updateEntiteit(e);
                        return(true);
                    }
                }
                break;


            case Voorwaarde.TRENDING:
                //de eventuele trend die aanwezig kan zijn juist zetten op de trend waarop we vergelijken
                newTrend.Voorwaarde = Voorwaarde.TRENDING;
                //if kijkt na of het aantal posts van gisteren tegenover vandaag met 50% is gestegen en er moet minstens een volume van 10 posts zijn
                if ((AantalVandaag / AantalGisteren) > 1.5 && AantalGisteren >= 10 && AantalVandaag >= 10)
                {
                    if (entiteit.Trends == null)
                    {
                        entiteit.Trends = new List <Trend>();
                    }
                    entiteit.Trends.Add(newTrend);
                    updateEntiteit(e);
                    return(true);
                }
                break;

            case Voorwaarde.KEYWORDS:
                break;

            default:
                break;
            }
            //als we hier komen is er geen trend aanwezig.
            return(false);
        }