示例#1
0
        public virtual double GetDistanceSq(Dictionary <string, Dictionary <string, NGram <T> > > ngram_group)
        {
            double sqr_sum        = 0;
            double ngram_distance = 0;

            foreach (string evidence_set_id in ngram_group.Keys)
            {
                Dictionary <string, NGram <T> > this_ngrams_by_query_variable_value = FindNGramWithEvidenceSetId(evidence_set_id);

                Dictionary <string, NGram <T> > ngrams_by_query_variable_value = ngram_group[evidence_set_id];
                foreach (string query_variable_value_id in ngrams_by_query_variable_value.Keys)
                {
                    NGram <T> ngram = ngrams_by_query_variable_value[query_variable_value_id];
                    if (this_ngrams_by_query_variable_value.ContainsKey(query_variable_value_id))
                    {
                        NGram <T> this_ngram = this_ngrams_by_query_variable_value[query_variable_value_id];
                        ngram_distance = this_ngram.ConditionalProbability - ngram.ConditionalProbability;
                    }
                    else
                    {
                        ngram_distance = ngram.ConditionalProbability;
                    }
                    sqr_sum += ngram_distance * ngram_distance;
                }
            }

            return(sqr_sum);
        }
示例#2
0
 public override bool Equals(object obj)
 {
     if (obj is NGram <T> )
     {
         NGram <T> rhs = obj as NGram <T>;
         return(ID == rhs.ID);
     }
     return(false);
 }
示例#3
0
        public static void ParseStoreGram(T[] sequence, Dictionary <string, Dictionary <string, NGram <T> > > ngram_group, int N)
        {
            int L = sequence.Length;
            int K = L - N + 1;

            T query_variable_value;

            T[]    evidence_variable_values;
            string query_variable_value_id;
            string ngram_id;
            string evidence_set_id;

            for (int k = 0; k < K; ++k)
            {
                SubSequence(sequence, k, N, out query_variable_value, out evidence_variable_values);
                ngram_id = NGram <T> .CreateNGramSignature(query_variable_value, evidence_variable_values, out query_variable_value_id, out evidence_set_id);

                Dictionary <string, NGram <T> > ngrams = null;

                if (evidence_set_id == null)
                {
                    evidence_set_id = "UniGram";
                }
                if (ngram_group.ContainsKey(evidence_set_id))
                {
                    ngrams = ngram_group[evidence_set_id];
                }
                else
                {
                    ngrams = new Dictionary <string, NGram <T> >();
                    ngram_group[evidence_set_id] = ngrams;
                }

                NGram <T> ngram = null;
                if (ngrams.ContainsKey(query_variable_value_id))
                {
                    ngram = ngrams[query_variable_value_id];
                }
                else
                {
                    ngram = new NGram <T>(N, query_variable_value, evidence_variable_values);
                    ngrams[query_variable_value_id] = ngram;
                }
                ngram.EvidenceJointSupportLevel++;
                ngram.JoinSupportLevel++;
            }
        }