예제 #1
0
        public void Test_CountWordsInString3()
        {
            int res = TweetAnalysis.CountWordsInString(
                "Saknet person i skred, politiet undersøker. Forsøk forsøkt.");

            Assert.Equal(8, res);
        }
예제 #2
0
        static void Main(string[] args)
        {
            const string fileName = @"C:\Users\lpesch\PrivateCap\Private\RKH\TwitterSAR\TwitterSARai\data\raw\vicinitas_user_tweets_vest_scoring_layout.xlsx";
            var          fi       = new FileInfo(fileName);

            using (var package = new ExcelPackage(fi))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets.First();
                var            rowCount  = worksheet.Dimension.Rows;

                int nonzeroScores = 0;
                for (int row = 2; row <= rowCount; row++)
                {
                    if (worksheet.Cells[row, 4] != null && (worksheet.Cells[row, 4]).Value != null)
                    {
                        // run the scoring function, output if nonzero
                        float score = TweetAnalysis.ScoreTweet((worksheet.Cells[row, 4]).Value.ToString(), out string _);
                        worksheet.Cells[row, 2].Value = score;
                        if (score > 0)
                        {
                            Console.WriteLine(worksheet.Cells[row, 4].Value.ToString());
                            Console.WriteLine($"Score: {score}");
                            nonzeroScores++;
                        }
                    }
                }
                Console.WriteLine($"Found {nonzeroScores} tweets with nonzero score.");
                package.Save();
            }

            Console.WriteLine("Processing finished!");
            Console.ReadKey();
        }
예제 #3
0
        public void TranformData()
        {
            var tweetAnalysis = new TweetAnalysis
            {
                CreatedDate                 = DateTime.Now,
                TotalNoOfTweets             = TotalTweetCount(),
                AvgTweetsPerHour            = AverageTweetsPerHour(),
                AvgTweetsPerMinute          = AverageTweetsPerMinute(),
                AvgTweetsPerSecond          = AverageTweetsPerSecond(),
                TopEmojis                   = GetTopEmojis(),
                PercentOfTweetsWithEmojis   = GetPercentOfEmojis(),
                TopHastags                  = TopHashTag(),
                PercentOfTweetsWithUrl      = GetPercentageOfURL(),
                PercentOfTweetsWithPhotoUrl = GetPercentageOfPhotoURL(),
                TopDomains                  = TopDomainsOfURL()
            };

            Console.WriteLine("\tBelow is the Data analysis\n");
            log.Info("\tBelow is the Data analysis\n");
            log.Info(JsonConvert.SerializeObject(tweetAnalysis));
            Console.WriteLine($"\tTotal Tweets analysis for {_configuration.GetSection("inMinutes").Value} minutes is as below");
            Console.WriteLine($"\tTotal number of tweets received: {tweetAnalysis.TotalNoOfTweets}");
            Console.WriteLine($"\tAverage tweets per Hour: {tweetAnalysis.AvgTweetsPerHour}");
            Console.WriteLine($"\tAverage tweets per Minute: {tweetAnalysis.AvgTweetsPerMinute}");
            Console.WriteLine($"\tAverage tweets per Second: {tweetAnalysis.AvgTweetsPerSecond}");
            Console.WriteLine($"\tTop Emojis in tweets: {JsonConvert.SerializeObject(tweetAnalysis.TopEmojis)}");
            Console.WriteLine($"\tPercent of tweets that contains Emojis: {tweetAnalysis.PercentOfTweetsWithEmojis} %");
            Console.WriteLine($"\tTop Hashtags: {JsonConvert.SerializeObject(tweetAnalysis.TopHastags)}");
            Console.WriteLine($"\tPercent of tweets that contain a url: {tweetAnalysis.PercentOfTweetsWithUrl} %");
            Console.WriteLine($"\tPercent of tweets that contain a photo url: {tweetAnalysis.PercentOfTweetsWithPhotoUrl} %");
            Console.WriteLine($"\tTop domains of urls in tweets: {JsonConvert.SerializeObject(tweetAnalysis.TopDomains)}");
            log.Info("\n***********************Task Completed**************************");
            Console.WriteLine("\n***********************Task Completed**************************");
        }
예제 #4
0
        public void Test_ScoreTweet1()
        {
            float res = TweetAnalysis.ScoreTweet(
                "#Bergen, Danmarksplass: Politiet har gjennomført farts"
                + "kontroll. 9 forenklede forelegg, 2 førerkortbeslag, høyeste"
                + " fart var 112 km/t i 50-sonen.", out string _);

            Assert.Equal(0, res);
        }
예제 #5
0
        public void Test_CountWordsInString1()
        {
            int res = TweetAnalysis.CountWordsInString(
                "#Bergen, Danmarksplass: Politiet har gjennomført farts"
                + "kontroll. 9 forenklede forelegg, 2 førerkortbeslag, høyeste"
                + " fart var 112 km/t i 50-sonen.");

            Assert.Equal(18, res);
        }
예제 #6
0
        public void Test_CountWordsInString2()
        {
            int res = TweetAnalysis.CountWordsInString(
                "#Espeland Bergen: Mann i 40 årene er savnet fra bopel det er"
                + " iverksatt leteaksjon. Mannskap fra Røde Kors Norske "
                + "Redningshunder samt Norsk Luftambulanse deltar foreløpig i"
                + " søket.");

            Assert.Equal(27, res);
        }
예제 #7
0
        public void Test_Blacklisting3()
        {
            float res = TweetAnalysis.ScoreTweet(
                "Rettelse: kun en bil som er involvert.",
                out string highlightedText);

            float expectedScore = 0; // blacklist "rettelse"

            Assert.Equal(expectedScore, res, 3);
        }
예제 #8
0
        public void Test_Blacklisting2()
        {
            float res = TweetAnalysis.ScoreTweet(
                "Har *gjennomsøkt* boligen. Ingen brann på stedet. " +
                "Brannvesenet avslutter på stedet.",
                out string highlightedText);

            float expectedScore = 0; // blacklist "brann"

            Assert.Equal(expectedScore, res, 3);
        }
예제 #9
0
        public void Test_Blacklisting1()
        {
            float res = TweetAnalysis.ScoreTweet(
                "#Bergen: E16 v/Takvam. Patr stanset bil, mistanke om kjøring" +
                " i ruspåvirket tilstand. Funn av narkotika i bilen. Fører " +
                "innsettes i fengsling forvaring. Sak opprettes.",
                out string highlightedText);

            float expectedScore = 0; // blacklist "narkotika"

            Assert.Equal(expectedScore, res, 3);
        }
예제 #10
0
        public void Test_ScoreTweet5()
        {
            float res = TweetAnalysis.ScoreTweet(
                "Saknet person i skred, politiet undersøker. Forsøk forsøkt.",
                out string highlightedText);

            float expectedScore = (float)2 / 8; // only eight words in text

            Assert.Equal(expectedScore, res, 3);

            Assert.Equal(
                "*Saknet* person i *skred,* politiet undersøker. Forsøk forsøkt.",
                highlightedText);
        }
예제 #11
0
        public void Test_ScoreTweet4()
        {
            string originalText =
                "#Bergen, Nordre Toppe: Ordensforstyrrelse, ruset og aggressiv"
                + " mann, i forbindelse med innbringelsen, forsøkte han å "
                + "skalle til en politibetjent, samt en politibetjent ble "
                + "spyttet i øyet, mannen innsatt i Arresten, anmeldt for "
                + "vold mot off. tjenestemann.";
            float res = TweetAnalysis.ScoreTweet(originalText,
                                                 out string highlightedText);

            Assert.Equal((float)0, res, 3);

            Assert.Equal(originalText, highlightedText);
        }
예제 #12
0
        public void Test_ErroneousTweet1()
        {
            // It turned out that it wasn't the line breaks in the tweet that
            // caused it to be rated at zero, it was "Brannvesenet", which
            // contains "brann". Fixed.
            float res = TweetAnalysis.ScoreTweet(
                @"#Misje #Øygarden

Leteaksjon i området Misje.Siste observasjon er kl 0530.

Beskrivelse: Mann 22 år, ca 180 cm, tynn, mørkt brunt hår.Iført sort jakke, blå t-shirt, sort bukse.

Politi, Brannvesenet, Norske redningshunder, Røde Kors og Norsk folkehjelp bistår.",
                out string highlightedText);

            float expectedScore = 0.162F; // blacklist "rettelse"

            Assert.Equal(expectedScore, res, 3);
        }
예제 #13
0
        public void Test_ScoreTweet2()
        {
            //string highlightedText = "";
            float res = TweetAnalysis.ScoreTweet(
                "#Espeland Bergen: Mann i 40 årene er savnet fra bopel det er"
                + " iverksatt leteaksjon. Mannskap fra Røde Kors Norske "
                + "Redningshunder samt Norsk Luftambulanse deltar foreløpig i"
                + " søket.", out string highlightedText);

            // The tweet has 27 words, but here the minimum in the denominator
            // in the score function selects the number of trigger words.
            float expectedScore = (float)7 / 27;

            Assert.Equal(expectedScore, res, 3);

            Assert.Equal(
                "#Espeland Bergen: Mann i 40 årene er *savnet* fra bopel det er"
                + " iverksatt *leteaksjon.* Mannskap fra *Røde* *Kors* Norske "
                + "*Redningshunder* samt Norsk *Luftambulanse* deltar foreløpig i"
                + " *søket.*", highlightedText);
        }
예제 #14
0
        public void Test_ScoreTweet3()
        {
            string txt =
                "#Kaupanger Politiet har leitet etter en mann i 30-årene siden"
                + " kl 04 i natt etter melding om beruset person som framsto "
                + "ute av stand til å ivareta seg selv. Lokalt politi fått "
                + "bistand fra Røde Kors og Norske redningshunder. Vedkommende "
                + "funnet ca kl 0930 i god behold.";
            float res = TweetAnalysis.ScoreTweet(txt, out string highlightedText);

            float expectedScore = (float)6 / Math.Min(
                TweetAnalysis.relevantStrings.Length,
                txt.Split().Length);

            Assert.Equal(expectedScore, res, 3);

            Assert.Equal(
                "#Kaupanger Politiet har *leitet* etter en mann i 30-årene siden"
                + " kl 04 i natt etter melding om beruset person som framsto "
                + "ute av stand til å ivareta seg selv. Lokalt politi fått "
                + "bistand fra *Røde* *Kors* og Norske *redningshunder.* Vedkommende"
                + " *funnet* ca kl 0930 i god *behold.*", highlightedText);
        }
예제 #15
0
        public void AnalyzeTweets(CancellationToken stoppingToken)
        {
            try
            {
                if (!TweetRepository.Tweets.Any())
                {
                    return;
                }

                var tweetCount = TweetRepository.Tweets.Count();
                if (tweetCount == _currentTweetCount)
                {
                    return;
                }

                Analysis = TweetAnalysisStrategy.Analyze(TweetRepository.Tweets);

                _currentTweetCount = tweetCount;
            }
            catch (Exception e)
            {
                Logger.LogError(e, "Error analyzing tweets");
            }
        }