示例#1
0
        protected Dictionary <string, double> TagByProximity(Dictionary <string, double> scoredStatements)
        {
            scoredStatements = scoredStatements
                               .OrderBy(x => x.Value)
                               .Reverse()
                               .ToDictionary(x => x.Key, x => x.Value);

            var proximityScoredStatements = new Dictionary <string, double>();
            var originalSentenceOrder     = SummarizationHelper.ConvertStatementToSentences(InitialStatement);

            var keys   = scoredStatements.Keys.ToList();
            var values = scoredStatements.Values.ToList();

            for (int idx = 0; idx < scoredStatements.Count; idx++)
            {
                int currentStatementIndex = 0;
                int parentIndex           = scoredStatements.Count;
                int childIndex            = 0;

                for (int originalIdx = 0; originalIdx < originalSentenceOrder.Count; originalIdx++)
                {
                    string currentStatement = originalSentenceOrder[originalIdx];
                    string parentStatement  = (originalIdx == 0) ? null : originalSentenceOrder[originalIdx - 1];                              // parent is it's self if root node.
                    string childStatement   = (originalIdx == originalSentenceOrder.Count - 1) ? null: originalSentenceOrder[originalIdx + 1]; // child is it's self if last node

                    if (parentStatement == null)
                    {
                        parentIndex = 0;
                    }
                    else if (childStatement == null)
                    {
                        childIndex = originalSentenceOrder.Count - 1;
                    }

                    if (keys[idx] == currentStatement)
                    {
                        currentStatementIndex = originalIdx;
                    }
                    else if (keys[idx] == parentStatement)
                    {
                        parentIndex = originalIdx;
                    }
                    else if (keys[idx] == childStatement)
                    {
                        childIndex = originalIdx;
                    }
                }

                int distanceFromParent = Math.Abs(currentStatementIndex - parentIndex);
                int distanceFromChild  = Math.Abs(currentStatementIndex - childIndex);

                double parentScore = _ratedScore(VectorWeight, distanceFromParent, keys.Count);
                double childScore  = _ratedScore(VectorWeight, distanceFromChild, keys.Count);

                proximityScoredStatements.Add(keys[idx], values[idx] + (parentScore + childScore) * Math.Abs(currentStatementIndex - idx + 1));
            }

            return(proximityScoredStatements);
        }
示例#2
0
        public Dictionary <string, double> Invoke(string statement)
        {
            var sentences = SummarizationHelper.ConvertStatementToSentences(statement);

            var emptyInitializedSentences = sentences
                                            .Select(x => new KeyValuePair <string, double>(x, 0.0))
                                            .ToDictionary(x => x.Key, x => x.Value);

            return(_synonymize(emptyInitializedSentences));
        }
示例#3
0
        private static Dictionary <string, double> _initializeEmpty(string statement)
        {
            var           baseStatements = new Dictionary <string, double>();
            List <string> sentences      = SummarizationHelper.ConvertStatementToSentences(statement);

            foreach (string sentence in sentences)
            {
                baseStatements.Add(sentence, 0);
            }

            return(baseStatements);
        }