Пример #1
0
        public static List <AQUESTION> GetATermsQuestions(IDictionary <string, Int32> ATerms)
        {
            List <AQUESTION> Questions = new List <AQUESTION>();

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

            foreach (string key in ATerms.Keys)
            {
                ATERM Term = Index.db.ATERMs.Where(T => T.VALUE == key).FirstOrDefault <ATERM>();

                if (Term != null && (Questions.Count == 0))
                {
                    foreach (AQUESTIONTERM AQT in Term.AQUESTIONTERMs)
                    {
                        Questions.Add(AQT.AQUESTION);
                    }
                }
                else if (Term != null && (Questions.Count > 0))
                {
                    List <AQUESTION> NewQuestions = new List <AQUESTION>();

                    foreach (AQUESTIONTERM AQT in Term.AQUESTIONTERMs)
                    {
                        Questions.Add(AQT.AQUESTION);
                    }

                    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 BuildArabicIndex()
        {
            List <AQUESTION> Questions = db.AQUESTIONs.Where(Q => Q.Indexed == 0).ToList <AQUESTION>();
            int NumberOfQuestions      = db.AQUESTIONs.ToList().Count;

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

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

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

                    ATERM Term = db.ATERMs.Where(T => T.VALUE == key).FirstOrDefault <ATERM>();

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

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

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

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

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

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