Exemplo n.º 1
0
        public List <Questions> GetQuestion_directly(QuizRTTemplate template)
        {
            List <Questions>      g_question_notable = new List <Questions>();
            Task <string>         id        = Gettopic_id("https://www.wikidata.org/w/api.php?action=wbsearchentities&search=" + template.TopicName + "&language=en&format=json");
            string                f_id      = id.Result;
            string                sparQL    = "SELECT ?personLabel WHERE { ?person wdt:P106 wd:" + f_id + " . SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . } }";
            Task <List <string> > questions = GetQuestionData(sparQL);
            List <string>         all_questions_without_tables = questions.Result;
            Task <List <string> > options     = GetOptionData("SELECT ?cid ?options WHERE {?cid wdt:P31 wd:Q28640. OPTIONAL {?cid rdfs:label ?options filter (lang(?options) = 'en') . }}Limit 100");
            List <string>         all_options = options.Result;

            for (int i = 0; i < all_questions_without_tables.Count; i++)
            {
                Questions s_object = new Questions();
                s_object.QuestionGiven = "What is " + all_questions_without_tables[i] + " Occupation ?";
                List <Options> mut_options_single_q = randomizeOptions(all_options, template.TopicName);
                s_object.QuestionOptions = mut_options_single_q;
                g_question_notable.Add(s_object);
            }
            return(g_question_notable);
            // Console.WriteLine(all_options+"opopop");
            // Console.WriteLine(all_questions_without_tables+"qqqqq");
        }
        public async Task <bool> InsertQuestionsAndOptions(QuestionGeneration q, ObjectId currentTemplateId)
        {
            var otherOptionsList = GenerateOtherOptions(q.CategoryName);

            string sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + q.TopicId + ".?cid wdt:" + q.CategoryId + " ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}LIMIT " + NumberOfQuestions + "";
            // string sparQL2 = $@"SELECT ?personLabel WHERE {{ ?person wdt:{q.Topic} wd:{q.Categ} . SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . } }LIMIT "+NumberOfQuestions+""; // Nishant
            Task <List <universal_object> > subjectForQuestion = System.Threading.Tasks.Task <string> .Run(() => GetSubjectsForQuestion(sparQL).Result);

            List <universal_object> listOfSubjectForQuestion = subjectForQuestion.Result;

            List <Questions> questionsList         = new List <Questions>();
            string           replacementStrSubject = '[' + GetBetween(q.Text, "[", "]") + ']';
            string           replacementStrObject  = '(' + GetBetween(q.Text, "(", ")") + ')';

            for (int i = 0; i < listOfSubjectForQuestion.Count; i++)
            {
                if (!(listOfSubjectForQuestion[i].mainobject[0] == 'Q' && IsDigitsOnly(listOfSubjectForQuestion[i].mainobject.Substring(1))))
                {
                    string questionText = q.Text;
                    questionText = questionText.Replace(replacementStrObject, q.CategoryName);
                    questionText = questionText.Replace(replacementStrSubject, listOfSubjectForQuestion[i].mainobject);

                    List <OtherOptions> listOfOtherOptions = new List <OtherOptions>();
                    // int iteratorForListOfOptions = 0;
                    int increaser = 0;
                    // otherOptionsList = otherOptionsList.GetRange(1, otherOptionsList.Count).Append(otherOptionsList.First()).ToList();

                    for (int j = 0; j < 3 + increaser; j++)
                    {
                        if (otherOptionsList[j] != "" && !(otherOptionsList[j][0] == 'Q' && IsDigitsOnly(otherOptionsList[j].Substring(1))))
                        {
                            OtherOptions otherOptionObject = new OtherOptions();
                            otherOptionObject.Option = otherOptionsList[j];
                            listOfOtherOptions.Add(otherOptionObject);
                            // if(iteratorForListOfOptions+3 < otherOptionsList.Count)
                            //     iteratorForListOfOptions++;
                            // else
                            //     iteratorForListOfOptions = 0;
                        }
                        else
                        {
                            increaser++;
                        }
                    }
                    otherOptionsList = Shift(otherOptionsList);

                    Questions questionObject = new Questions();
                    questionObject.Question         = questionText;
                    questionObject.CorrectOption    = listOfSubjectForQuestion[i].predicate;
                    questionObject.OtherOptionsList = listOfOtherOptions;

                    questionsList.Add(questionObject);
                }
            }
            QuestionGeneration questionGeneratedObject = new QuestionGeneration();

            questionGeneratedObject.Id            = currentTemplateId;
            questionGeneratedObject.Text          = q.Text;
            questionGeneratedObject.CategoryId    = q.CategoryId;
            questionGeneratedObject.CategoryName  = q.CategoryName;
            questionGeneratedObject.TopicId       = q.TopicId;
            questionGeneratedObject.TopicName     = q.TopicName;
            questionGeneratedObject.QuestionsList = questionsList;
            ReplaceOneResult updateResult = await context.QuestionGenerationCollection.
                                            ReplaceOneAsync(filter : g => g.Id == questionGeneratedObject.Id, replacement : questionGeneratedObject);

            return(updateResult.IsAcknowledged && updateResult.ModifiedCount > 0);
        }
Exemplo n.º 3
0
        // ------------------------

        public bool GenerateQuestion(QuizRTTemplate q)
        {
            Console.WriteLine("---Inside-GenerateQuestion---");
            if (q.TopicName == "Occupation")
            {
                sparQL = "SELECT ?personLabel WHERE { ?person wdt:" + q.Topic + " wd:" + q.Categ + " . SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . } }LIMIT " + NumberOfQuestions + "";
                Task <List <string> > dataReturns = System.Threading.Tasks.Task <string> .Run(() => GetQuestionData(sparQL).Result);

                List <string> quesReviewList = dataReturns.Result;

                List <Questions> qL = new List <Questions>();
                for (int i = 0; i < quesReviewList.Count; i++)
                {
                    Questions ques = new Questions();
                    ques.QuestionGiven = "What is " + quesReviewList[i] + " " + q.TopicName + "?";
                    ques.Topic         = q.TopicName;
                    ques.Categ         = q.CategName;
                    qL.Add(ques);
                }
                context.QuestionsT.AddRange(qL);
                context.SaveChanges();
                return(true);
            }
            else if (q.TopicName != "Occupation")
            {
                //List<string> other_options = new List<string>();
                Task <string> id   = Gettopic_id("https://www.wikidata.org/w/api.php?action=wbsearchentities&search=" + q.TopicName + "&language=en&format=json");
                string        f_id = id.Result;
                if (q.TopicName == "Book")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + f_id + ".?cid wdt:P50 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                }

                else if (q.TopicName == "princely state of the British Raj")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:Q1336152 . ?cid wdt:P17 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                    Console.WriteLine("rajjjjj");
                }
                else if (q.TopicName == "state of the United States")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + q.Topic + ".?cid wdt:P138 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                }

                else if (q.TopicName == "business")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + q.Topic + ".?cid wdt:P571 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                }

                else if (q.TopicName != "princely state of the British Raj")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + q.Topic + ".?cid wdt:P17 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                }

                else if (q.TopicName != "princely state of the British Raj")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + q.Topic + ".?cid wdt:P17 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                }

                else if (q.TopicName != "princely state of the British Raj")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + q.Topic + ".?cid wdt:P17 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                }

                else if (q.TopicName != "princely state of the British Raj")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + q.Topic + ".?cid wdt:P17 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                }

                else if (q.TopicName != "princely state of the British Raj")
                {
                    sparQL = "SELECT ?cidLabel ?authortitleLabel WHERE {?cid wdt:P31 wd:" + q.Topic + ".?cid wdt:P17 ?authortitle .SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' . }}Limit 10";
                }

                Task <List <universal_object> > dataReturns = System.Threading.Tasks.Task <string> .Run(() => GetQuestionData_others(sparQL).Result);

                List <universal_object> quesReviewList = dataReturns.Result;
                Console.WriteLine(quesReviewList.Count + "aaaaaaaaaaaaaaaaaa");
                List <Questions> qL = new List <Questions>();

                List <string> books_etc_options = GenerateOptions1(q);

                for (int i = 0; i < quesReviewList.Count; i++)
                {
                    Questions ques = new Questions();
                    if (q.TopicName == "Book")
                    {
                        ques.QuestionGiven = "Who is the author of " + quesReviewList[i].mainobject + "?";
                    }
                    else if (q.TopicName == "princely state of the British Raj")
                    {
                        ques.QuestionGiven = " " + quesReviewList[i].mainobject + " belongs to which country ?";
                        Console.WriteLine("qqqqqqqqqqqqqqqqqqqqq");
                    }
                    else if (q.TopicName == "state of the United States")
                    {
                        ques.QuestionGiven = " " + quesReviewList[i].mainobject + " is named after ?";
                    }
                    else if (q.TopicName == "business")
                    {
                        Console.WriteLine("qqqqqqqqqqqqqqqqqqqqq");
                        ques.QuestionGiven = "When was " + quesReviewList[i].mainobject + " established ?";
                    }
                    ques.Topic = q.TopicName;
                    ques.Categ = q.CategName;
                    //qL.Add(ques);
                    context.QuestionsT.Add(ques);
                    Options op = new Options();
                    op.IsCorrect   = true;
                    op.QuestionsId = ques.QuestionsId;
                    op.OptionGiven = quesReviewList[i].predicate;
                    context.OptionsT.Add(op);
                    List <int> randomNumber = getRandonNumber(0, books_etc_options.Count - 1, optionNumber + 2);
                    for (int j = 0; j < 3; j++)
                    {
                        Options op1 = new Options();
                        op1.IsCorrect   = false;
                        op1.QuestionsId = ques.QuestionsId;
                        // if(books_etc_options[randomNumber[k]]!=op.OptionGiven)
                        // {
                        op1.OptionGiven = books_etc_options[randomNumber[j]];
                        // j++;
                        context.OptionsT.Add(op1);
                        //}
                        // k++;
                    }
                }
                //context.QuestionsT.AddRange(qL);
                context.SaveChanges();
                Console.WriteLine("quyuqywuqywuqyw");
                return(true);
            }
            return(false);
        }