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 }); } }
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 }); }
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}"); }
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); }
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 }); }
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); }
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); }
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 }); }
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 }); } }