示例#1
0
        private IList <double> SentimentValence(double valence, SentiText sentiText, string item, int i, IList <double> sentiments)
        {
            string itemLowerCase = item.ToLower();

            if (!Lexicon.ContainsKey(itemLowerCase))
            {
                sentiments.Add(valence);
                return(sentiments);
            }
            bool           isCapDiff         = sentiText.IsCapDifferential;
            IList <string> wordsAndEmoticons = sentiText.WordsAndEmoticons;

            valence = Lexicon[itemLowerCase];
            if (isCapDiff && item.IsUpper())
            {
                if (valence > 0)
                {
                    valence += SentimentUtils.CIncr;
                }
                else
                {
                    valence -= SentimentUtils.CIncr;
                }
            }

            for (int startI = 0; startI < 3; startI++)
            {
                if (i > startI && !Lexicon.ContainsKey(wordsAndEmoticons[i - (startI + 1)].ToLower()))
                {
                    double s = SentimentUtils.ScalarIncDec(wordsAndEmoticons[i - (startI + 1)], valence, isCapDiff);
                    if (startI == 1 && s != 0)
                    {
                        s = s * 0.95;
                    }
                    if (startI == 2 && s != 0)
                    {
                        s = s * 0.9;
                    }
                    valence = valence + s;

                    valence = NeverCheck(valence, wordsAndEmoticons, startI, i);

                    if (startI == 2)
                    {
                        valence = IdiomsCheck(valence, wordsAndEmoticons, i);
                    }
                }
            }

            valence = LeastCheck(valence, wordsAndEmoticons, i);
            sentiments.Add(valence);
            return(sentiments);
        }
示例#2
0
        /// <summary>
        /// Return metrics for positive, negative and neutral sentiment based on the input text.
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public SentimentAnalysisResults PolarityScores(string input)
        {
            SentiText      sentiText         = new SentiText(input);
            IList <double> sentiments        = new List <double>();
            IList <string> wordsAndEmoticons = sentiText.WordsAndEmoticons;

            for (int i = 0; i < wordsAndEmoticons.Count; i++)
            {
                string item    = wordsAndEmoticons[i];
                double valence = 0;
                if (i < wordsAndEmoticons.Count - 1 && item.ToLower() == "kind" && wordsAndEmoticons[i + 1] == "of" ||
                    SentimentUtils.BoosterDict.ContainsKey(item.ToLower()))
                {
                    sentiments.Add(valence);
                    continue;
                }
                sentiments = SentimentValence(valence, sentiText, item, i, sentiments);
            }

            sentiments = ButCheck(wordsAndEmoticons, sentiments);

            return(ScoreValence(sentiments, input));
        }