示例#1
0
        public static List <EQUESTION> GetETermsQuestions(IDictionary <string, Int32> ETerms)
        {
            List <EQUESTION> Questions = new List <EQUESTION>();

            List <ETERM> Terms = new List <ETERM>();

            foreach (string key in ETerms.Keys)
            {
                ETERM Term = Index.db.ETERMs.Where(T => T.VALUE == key).FirstOrDefault <ETERM>();

                if (Term != null && (Questions.Count == 0))
                {
                    foreach (EQUESTIONTERM EQT in Term.EQUESTIONTERMs)
                    {
                        Questions.Add(EQT.EQUESTION);
                    }
                }
                else if (Term != null && (Questions.Count > 0))
                {
                    List <EQUESTION> NewQuestions = new List <EQUESTION>();

                    foreach (EQUESTIONTERM EQT in Term.EQUESTIONTERMs)
                    {
                        NewQuestions.Add(EQT.EQUESTION);
                    }

                    Questions = (from NewQuestion in NewQuestions
                                 join OldQuestion in Questions
                                 on NewQuestion.ID equals OldQuestion.ID
                                 select NewQuestion).ToList();
                }
            }

            return(Questions);
        }
示例#2
0
        public static void BuildEnglishIndex()
        {
            List <EQUESTION> Questions = db.EQUESTIONs.Where(Q => Q.Indexed == 0).ToList <EQUESTION>();
            int NumberOfQuestions      = db.EQUESTIONs.ToList().Count;

            foreach (EQUESTION Question in Questions)
            {
                var QuestionText = Question.VALUE + " " + Question.ANSWER;

                IDictionary <string, Int32> QeustionTerms = QuestionText.EnglishTokenize();

                foreach (string key in QeustionTerms.Keys)
                {
                    // TF : Term Frequency
                    var Frequency = QeustionTerms[key];

                    ETERM Term = db.ETERMs.Where(T => T.VALUE == key).FirstOrDefault <ETERM>();

                    if (Term != null)
                    {
                        Term.IDF             = (Convert.ToInt32(Term.IDF) + 1).ToString();
                        db.Entry(Term).State = EntityState.Modified;
                    }
                    else
                    {
                        Term = new ETERM();

                        Term.ID    = Guid.NewGuid();
                        Term.VALUE = key;
                        Term.IDF   = Frequency.ToString();
                        db.ETERMs.Add(Term);
                    }

                    EQUESTIONTERM QuestionTerm = db.EQUESTIONTERMs.Where(QT => QT.TERMID == Term.ID && QT.QUESTIONID == Question.ID).FirstOrDefault <EQUESTIONTERM>();
                    if (QuestionTerm == null)
                    {
                        QuestionTerm            = new EQUESTIONTERM();
                        QuestionTerm.ID         = Guid.NewGuid();
                        QuestionTerm.QUESTIONID = Question.ID;
                        QuestionTerm.TERMID     = Term.ID;
                        QuestionTerm.TF         = Frequency.ToString();
                        db.EQUESTIONTERMs.Add(QuestionTerm);
                    }
                }

                Question.Indexed         = 1;
                db.Entry(Question).State = EntityState.Modified;
                db.SaveChanges();

                List <EQUESTIONTERM> QuestionTerms = db.EQUESTIONTERMs.Where(QT => QT.QUESTIONID == Question.ID).ToList <EQUESTIONTERM>();

                foreach (EQUESTIONTERM QuestionTerm in QuestionTerms)
                {
                    QuestionTerm.WEIGHT          = (Math.Round(Convert.ToDouble(QuestionTerm.TF) * Math.Log(NumberOfQuestions / Convert.ToDouble(QuestionTerm.ETERM.IDF)), 2)).ToString();
                    db.Entry(QuestionTerm).State = EntityState.Modified;
                }
                db.SaveChanges();
            }
        }