public bool berekenTrends(int minVoorwaarde, List <Post> posts, Voorwaarde voorwaarde) { throw new NotImplementedException(); }
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); }