Esempio n. 1
0
        public static GeneratedQuestion TreatSentenceWithIN(SentenceInformationDto sentence, SentenceDependencyDto sentenceIN,
                                                            SentenceDependencyDto subjectFromSentence, WordInformationDto subject)
        {
            var inWord = Helper.FindWordInList(sentence.Words, sentenceIN.DependentGloss);

            if (inWord.PartOfSpeech.ToLower() != "nn")
            {
                return(null);
            }
            var nounOF = sentence.Dependencies.FirstOrDefault(d => d.Dep == "nmod:of" &&
                                                              d.GovernorGloss == inWord.Word);

            if (nounOF == null || subjectFromSentence == null)
            {
                return(null);
            }
            var answer   = nounOF.DependentGloss;
            var verbe    = Helper.FindWordInList(sentence.Words, subjectFromSentence.GovernorGloss);
            var verbeAND = sentence.Dependencies.FirstOrDefault(d => d.Dep.ToLower() == "conj:and" &&
                                                                d.GovernorGloss == verbe.Word);

            if (verbeAND != null)
            {
                var verbeAndWord = Helper.FindWordInList(sentence.Words, verbeAND.DependentGloss);

                if (verbe.PartOfSpeech.ToLower() == "vbz")
                {
                    var question = $"Where does {subject.Word} {verbeAndWord.Word} and {verbe.Word}";
                    return(new GeneratedQuestion {
                        Answer = answer, Question = question
                    });
                }
                else
                {
                    var question = $"Where did {subject.Word} {verbeAndWord.Lemma} and {verbe.Lemma}";
                    return(new GeneratedQuestion {
                        Answer = answer, Question = question
                    });
                }
            }
            if (verbe.PartOfSpeech.ToLower() == "vbz")
            {
                var question = $"Where does {subject.Word}  {verbe.Word}";
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }
            else
            {
                var question = $"Where did {subject.Word} {verbe.Lemma}";
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }
        }
Esempio n. 2
0
        private static GeneratedQuestion TreatCaseWithPersonAndVerbeNot_IS_(SentenceInformationDto sentence,
                                                                            SentenceDependencyDto sentenceCOP, string answer)
        {
            var questionText = Helper.TrimQuestionAfter(sentence.SentenceText, answer);

            questionText = questionText.Replace(answer, "")
                           .Replace(sentenceCOP.DependentGloss, "");
            string question = $"Who {sentenceCOP.DependentGloss} {questionText}";

            return(new GeneratedQuestion {
                Answer = answer, Question = question
            });
        }
Esempio n. 3
0
        public static string GenerateAnswer(SentenceInformationDto sentence, SentenceDependencyDto sentenceDependency = null,
                                            WordInformationDto wordInformation = null, WordInformationDto subjectWord = null)
        {
            var baseAnswer = GetBaseAnswer(sentence, sentenceDependency, wordInformation ?? subjectWord);
            var answer     = baseAnswer;
            var answerDet  = GetWordDET(sentence, answer);

            if (answer != string.Empty)
            {
                answer = TreatAnswerCompound(sentence, baseAnswer, answer);

                answer = TreatAnswerNumMod(sentence, baseAnswer, answer);

                answer = TreatAnswerPossession(sentence, baseAnswer, answer);

                answer = TreatAmod(sentence, baseAnswer, answer);

                answer = TreatNMODSentence(sentence, baseAnswer, answer);
            }

            if (subjectWord != null)
            {
                var subjectAMOD = sentence.Dependencies.Where(d => d.Dep == "amod" && d.GovernorGloss == subjectWord.Word);
                foreach (var subjAmod in subjectAMOD)
                {
                    answer = $"{subjAmod.DependentGloss} {subjectWord.Word}";
                }
            }

            if (sentenceDependency != null && string.IsNullOrEmpty(answer))
            {
                answer    = sentenceDependency.DependentGloss;
                answerDet = GetWordDET(sentence, sentenceDependency.DependentGloss);
            }

            if (wordInformation != null)
            {
                answerDet = GetWordDET(sentence, wordInformation.Word);
            }

            if (answerDet != null)
            {
                answer = $"{answerDet.DependentGloss} {answer}";
            }

            return(answer);
        }
        private static string TreatPersonCase(SentenceInformationDto sentence, string questionText,
                                              SentenceDependencyDto sentenceDependency, WordInformationDto baseAnswer, bool isPast = false)
        {
            if (baseAnswer.NamedEntityRecognition.ToLower() == "person" ||
                baseAnswer.PartOfSpeech.ToLower() == "nnp")
            {
                return(isPast ?
                       $"Who did {questionText}" :
                       $"Who {questionText}");
            }

            var dobjAux = sentence.Dependencies
                          .FirstOrDefault(d => d.Dep.ToLower() == "auxpass" && d.GovernorGloss == sentenceDependency.GovernorGloss);

            if (dobjAux != null)
            {
                questionText = questionText.Replace(dobjAux.DependentGloss, "");
                return($"How {dobjAux.DependentGloss} {questionText}");
            }
            return($"How is {questionText}");
        }
Esempio n. 5
0
 private static string GetBaseAnswer(SentenceInformationDto sentence, SentenceDependencyDto sentenceDependency, WordInformationDto wordInformation)
 {
     if (sentenceDependency != null && wordInformation != null && (wordInformation.NamedEntityRecognition.ToLower() == "person" ||
                                                                   wordInformation.PartOfSpeech.ToLower() == "nn"))
     {
         return(wordInformation.Word);
     }
     if (sentenceDependency != null)
     {
         var sentenceDep = Helper.FindWordInList(sentence.Words, sentenceDependency.DependentGloss);
         if (sentenceDep.PartOfSpeech.ToLower() == "vb" ||
             sentenceDep.PartOfSpeech.ToLower() == "vbd" ||
             sentenceDep.PartOfSpeech.ToLower() == "vbg" ||
             sentenceDep.PartOfSpeech.ToLower() == "vbn" ||
             sentenceDep.PartOfSpeech.ToLower() == "vbp" ||
             sentenceDep.PartOfSpeech.ToLower() == "vbz")
         {
             return(sentenceDependency.GovernorGloss);
         }
         return(sentenceDependency.DependentGloss);
     }
     return(wordInformation != null ? wordInformation.Word : string.Empty);
 }
Esempio n. 6
0
        public static GeneratedQuestion TreatDateSentence(SentenceInformationDto sentence, WordInformationDto sentenceDate,
                                                          SentenceDependencyDto subjectFromSentence)
        {
            var composedAnswer = AnswerGenerator.GenerateAnswer(sentence, subjectWord: sentenceDate);
            var sentencesCases = GetSentenceCases(sentence, sentenceDate, composedAnswer);
            var firstWord      = sentence.Words.First();
            var question       = sentence.SentenceText
                                 .Replace(sentencesCases, "");

            if (question.Contains(firstWord.Word) && !WordIsName(firstWord))
            {
                question = question.Replace(firstWord.Word, firstWord.Lemma);
            }

            if (subjectFromSentence != null)
            {
                return(GenerateQuestion(sentence, sentenceDate, subjectFromSentence));
            }

            question = $"When did {question}";
            return(new GeneratedQuestion {
                Answer = composedAnswer, Question = question
            });
        }
Esempio n. 7
0
        private static GeneratedQuestion GenerateQuestion(SentenceInformationDto sentence, WordInformationDto sentenceDate,
                                                          SentenceDependencyDto subjectFromSentence)
        {
            var question     = string.Empty;
            var verbeWord    = Helper.FindWordInList(sentence.Words, subjectFromSentence.GovernorGloss);
            var verbeAuxPass = sentence.Dependencies.FirstOrDefault(d => d.Dep.ToLower() == "auxpass" &&
                                                                    d.GovernorGloss == verbeWord.Word);

            if (verbeWord.PartOfSpeech.ToLower() == "vbd")
            {
                question = question.Replace(verbeWord.Word, verbeWord.Lemma);
            }

            var verbeAux = sentence.Dependencies.FirstOrDefault(d =>
                                                                d.Dep.ToLower() == "aux" &&
                                                                d.GovernorGloss == verbeWord.Word);

            if (verbeAux != null)
            {
                question = question.Replace(verbeAux.DependentGloss, "");
                question = $"When {verbeAux.DependentGloss} {question}";
                return(new GeneratedQuestion {
                    Answer = sentenceDate.Word, Question = question
                });
            }

            if (verbeAuxPass != null)
            {
                question = question.Replace(verbeAuxPass.DependentGloss, "");
                question = $"When {verbeAuxPass.DependentGloss} {question}";
                return(new GeneratedQuestion {
                    Answer = sentenceDate.Word, Question = question
                });
            }
            return(null);
        }
        public static GeneratedQuestion TreatSentenceWithAgent(SentenceInformationDto sentence, SentenceDependencyDto sentenceAGENT,
                                                               WordInformationDto subject)
        {
            var answer = sentenceAGENT.DependentGloss;

            var subjectDet = sentence.Dependencies.FirstOrDefault(d => d.Dep.ToLower() == "det" &&
                                                                  d.GovernorGloss == subject.Word);
            var subj = subject.Word;

            if (subjectDet != null)
            {
                subj = $"{subjectDet.DependentGloss} {subject.Word}";
            }

            var otherAgents = sentence.Dependencies.Where(d =>
                                                          d.Dep.ToLower() == "nmod:agent" &&
                                                          d.GovernorGloss == sentenceAGENT.GovernorGloss &&
                                                          d.DependentGloss != answer);

            var connectionCC = sentence.Dependencies.FirstOrDefault(d =>
                                                                    d.Dep.ToLower() == "cc" &&
                                                                    d.GovernorGloss == answer);

            if (connectionCC != null)
            {
                foreach (var agent in otherAgents)
                {
                    answer = $"{answer} {connectionCC.DependentGloss} {agent.DependentGloss}";
                }
            }

            var verbe      = Helper.FindWordInList(sentence.Words, sentenceAGENT.GovernorGloss);
            var answerWord = Helper.FindWordInList(sentence.Words, sentenceAGENT.DependentGloss);

            if (answerWord.PartOfSpeech.ToLower() == "nnp" ||
                answerWord.NamedEntityRecognition.ToLower() == "person")
            {
                var question = $"Who {verbe.Word} {subj.ToLower()}";
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }
            return(null);
        }
Esempio n. 9
0
        public static GeneratedQuestion CreateQuestionBasedOnSubject(SentenceInformationDto sentence, SentenceDependencyDto subjectFromSentence,
                                                                     WordInformationDto subject)
        {
            if (subjectFromSentence == null)
            {
                return(null);
            }
            var subjectRelationWord = Helper.FindWordInList(sentence.Words, subjectFromSentence.GovernorGloss);
            var answer = AnswerGenerator.GenerateAnswer(sentence, wordInformation: subject);

            if (subjectRelationWord.PartOfSpeech == "VBZ" ||
                subjectRelationWord.PartOfSpeech == "VBN" ||
                subjectRelationWord.PartOfSpeech == "VBD")
            {
                string question;

                if (subject.NamedEntityRecognition.ToLower() == "person" ||
                    subject.PartOfSpeech.ToLower() == "prp" ||
                    subject.PartOfSpeech.ToLower() == "nnp")
                {
                    question = sentence.SentenceText.Replace(answer, "Who");
                    question = Helper.TrimQuestion(question, "Who");
                }
                else
                {
                    question = sentence.SentenceText.Replace(answer, "What");
                    question = Helper.TrimQuestion(question, "What");
                }
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }
            if (subjectRelationWord.PartOfSpeech == "NN" ||
                subjectRelationWord.PartOfSpeech == "NNS" ||
                subjectRelationWord.PartOfSpeech == "NNP" ||
                subjectRelationWord.PartOfSpeech == "NNPS")
            {
            }

            return(null);
        }
        public static GeneratedQuestion TreatSentenceWithNSUBJ(SentenceInformationDto sentence, SentenceDependencyDto sentenceNSUBJ,
                                                               WordInformationDto subject)
        {
            var subjectRelation = Helper.FindWordInList(sentence.Words, sentenceNSUBJ.GovernorGloss);

            var answer = AnswerGenerator.GenerateAnswer(sentence, subjectWord: subject);

            if (subjectRelation.PartOfSpeech.ToLower() == "vbz" ||
                subjectRelation.PartOfSpeech.ToLower() == "vbd" ||
                subjectRelation.PartOfSpeech.ToLower() == "vbn")
            {
                string question;
                if (SubjectIsReferingToPerson(subject))
                {
                    var questionText = sentence.SentenceText.Replace(answer, "Who ");
                    question = $"{questionText}";
                    question = Helper.TrimQuestion(question, "Who");
                    return(new GeneratedQuestion {
                        Answer = answer, Question = question
                    });
                }
                if (subject.NamedEntityRecognition.ToLower() != "o")
                {
                    var questionText = sentence.SentenceText.Replace(answer, "Which ");
                    question = $"{questionText}";
                    question = Helper.TrimQuestion(question, "Which");
                }
                else
                {
                    var questionText = sentence.SentenceText.Replace(answer, "What ");
                    question = $"{questionText}";
                    question = Helper.TrimQuestion(question, "What");
                }
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }
            return(null);
        }
        public static GeneratedQuestion TreatSentenceWithDOBJ(SentenceInformationDto sentence,
                                                              SentenceDependencyDto sentenceDOBJ)
        {
            var answer     = sentenceDOBJ.DependentGloss;
            var answerWord = Helper.FindWordInList(sentence.Words, answer);

            answer = AnswerGenerator.GenerateAnswer(sentence, sentenceDOBJ);
            var answerWords = answer.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            var verbe       = Helper.FindWordInList(sentence.Words, sentenceDOBJ.GovernorGloss);

            var firstWord = sentence.Words.FirstOrDefault();

            if (firstWord == null)
            {
                return(null);
            }
            string question;
            var    questionText = sentence.SentenceText
                                  .Replace(firstWord.Word, firstWord.Lemma);

            foreach (var word in answerWords)
            {
                questionText = questionText.Replace($" {word}", " ");
            }


            var answerNMODOF = sentence.Dependencies.FirstOrDefault(d => d.Dep.ToLower() == "nmod:of" &&
                                                                    d.GovernorGloss == answerWord.Word);
            var nmodOfString = " ";

            if (answerNMODOF != null)
            {
                questionText = questionText.Replace(answerNMODOF.DependentGloss, "");
                nmodOfString = $" of {answerNMODOF.DependentGloss} ";
            }

            var dobjNUMMode = sentence.Dependencies.FirstOrDefault(d => d.Dep.ToLower() == "nummod" &&
                                                                   d.GovernorGloss == sentenceDOBJ.DependentGloss);

            if (dobjNUMMode != null)
            {
                if (verbe.PartOfSpeech.ToLower() == "vbd")
                {
                    questionText = questionText.Replace(verbe.Word, verbe.Lemma);
                    question     = $"How many {answerWord.Word}{nmodOfString}did {questionText}";
                    return(new GeneratedQuestion {
                        Answer = answer, Question = question
                    });
                }
                question = $"How many {answerWord.Word}{nmodOfString}{questionText}";
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }



            if (answerWord.PartOfSpeech.ToLower() == "nn" ||
                answerWord.PartOfSpeech.ToLower() == "nns")
            {
                question = TreatObjectCase(sentence, verbe, questionText);
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }

            var answerPOS = Helper.FindWordInList(sentence.Words, answerWord.Word);

            if (answerPOS.PartOfSpeech.ToLower() == "nnp" ||
                answerPOS.PartOfSpeech.ToLower() == "nn")
            {
                if (verbe.PartOfSpeech.ToLower() == "vbd")
                {
                    questionText = questionText.Replace(verbe.Word, verbe.Lemma);
                    question     = TreatPersonCase(sentence, questionText, sentenceDOBJ, answerWord, true);
                }
                else
                {
                    question = TreatPersonCase(sentence, questionText, sentenceDOBJ, answerWord);
                }
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }
            return(null);
        }
Esempio n. 12
0
        public static GeneratedQuestion TreatSimpleCOPSentence(SentenceInformationDto sentence, WordInformationDto subject,
                                                               SentenceDependencyDto sentenceCOP)
        {
            var copPartOfSpeech = Helper.FindWordInList(sentence.Words, sentenceCOP.GovernorGloss).PartOfSpeech;
            var copVerbe        = Helper.FindWordInList(sentence.Words, sentenceCOP.DependentGloss);
            var baseAnswer      = Helper.FindWordInList(sentence.Words, sentenceCOP.GovernorGloss);
            var subjectWord     = Helper.FindWordInList(sentence.Words, subject.Word);

            if (MustReturnNull(subjectWord))
            {
                return(null);
            }
            var answer = AnswerGenerator.GenerateAnswer(sentence, sentenceCOP, subjectWord: subjectWord);

            var    firstWord = sentence.Words.First();
            string question;

            if (baseAnswer.NamedEntityRecognition.ToLower() == "person" && copVerbe.Lemma == "be")
            {
                return(TreatCaseWhereAnswerIsPerson(sentence, firstWord, copVerbe, answer));
            }

            if (subjectWord.PartOfSpeech.ToLower() == "nn")
            {
                return(TreatCaseWhereAnswerIsObject(sentence, answer));
            }

            if (copVerbe != null && copVerbe.Lemma == "be")
            {
                question = $"What {copVerbe.Word} {subjectWord.Word}";
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }

            if (subjectWord.NamedEntityRecognition.ToLower() == "person" ||
                subjectWord.PartOfSpeech.ToLower() == "nnp" ||
                subjectWord.PartOfSpeech.ToLower() == "nns")
            {
                question = $"{sentence.SentenceText.Replace(answer, "Who")}";
                question = Helper.TrimQuestion(question, "Who");
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }

            if (baseAnswer.NamedEntityRecognition.ToLower() == "person" ||
                baseAnswer.PartOfSpeech.ToLower() == "nnp")
            {
                return(TreatCaseWithPersonAndVerbeNot_IS_(sentence, sentenceCOP, answer));
            }

            question = copPartOfSpeech == "JJ" || copPartOfSpeech == "NNS" ?
                       $"{sentence.SentenceText.Replace(answer, "What")}" :
                       $"{sentence.SentenceText.Replace(answer, "Which")}";

            if (sentence.SentenceText + "?" == question)
            {
                return(null);
            }
            question = Helper.TrimQuestion(question, "What");
            question = Helper.TrimQuestion(question, "Which");
            return(new GeneratedQuestion {
                Answer = answer, Question = question
            });
        }
Esempio n. 13
0
        public static GeneratedQuestion TreatSimpleXCOMPSentence(SentenceInformationDto sentence, SentenceDependencyDto subjectFromRes,
                                                                 WordInformationDto subject, SentenceDependencyDto sentenceXCOMP)
        {
            var subjectPossession = Helper.GetSubjectPossession(sentence);

            var answer       = AnswerGenerator.GenerateAnswer(sentence, subjectFromRes, subjectWord: subject);
            var predicate    = sentence.Words.FirstOrDefault(w => w.Word == subjectFromRes.GovernorGloss);
            var wordInResult = sentence.Words.FirstOrDefault(w => w.Word == sentenceXCOMP.DependentGloss);

            if (wordInResult == null || predicate == null)
            {
                return(null);
            }

            var pos = wordInResult.PartOfSpeech;

            if (pos != "JJ")
            {
                return(null);
            }

            if (subjectPossession != null)
            {
                var question = $"How does {subjectPossession} {subject.Lemma} {predicate.Lemma}";
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }
            else
            {
                var question = $"How does {subject.Lemma} {predicate.Lemma}";
                return(new GeneratedQuestion {
                    Answer = answer, Question = question
                });
            }
        }