public static Sentence FindModifier(string[] sentenceArray, List <int> takenWords, Sentence sentence) { //Find verb modifier for (int i = 1; i < sentenceArray.Length; i++) { if (takenWords.Contains(i)) { continue; } if (Words.FindTypeOfItem(sentenceArray[i]).HasFlag(WordTypes.Modifier)) { sentence.VerbModifier = sentenceArray[i]; takenWords.Add(i); for (int n = i + 1; n < sentenceArray.Length; n++) { if (takenWords.Contains(n)) { continue; } if (sentenceArray[n] == "the" || sentenceArray[n] == "and") { takenWords.Add(n); continue; } if (n == sentenceArray.Length - 1 || Words.FindTypeOfItem(sentenceArray[n + 1]) != WordTypes.Other) { sentence.VerbModifierObject.Name = sentenceArray[n]; takenWords.Add(n); break; } sentence.VerbModifierObject.Adjectives.Add(sentenceArray[n]); takenWords.Add(n); } //if (sentenceArray.Length > i && sentenceArray[i + 1] == "the") //{ // takenWords.Add(i + 1); // for (int n = i + 1; n < sentenceArray.Length; n++) // { // if (takenWords.Contains(n)) // continue; // if (sentenceArray[n] == "and") // { // takenWords.Add(n); // continue; // } // //If the name/pronoun/noun exists exit loop. // if (Words.DoesNameExist(sentenceArray[n])) // { // sentence.VerbModifierObject.Name = sentenceArray[n]; // takenWords.Add(n); // break; // } // sentence.VerbModifierObject.Adjectives.Add(sentenceArray[n]); // takenWords.Add(n); // } // break; //} //if (sentenceArray.Length > i && Words.FindTypeOfItem(sentenceArray[i + 1]) == "other") //{ // sentence.VerbModifierObject.Name = sentenceArray[i + 1]; // takenWords.Add(i + 1); // break; //} } } return(sentence); }
public static Sentence FindObjects(string[] sentenceArray, List <int> takenWords, Sentence sentence) { //Find preposition and the indirect object after it. for (int i = 1; i < sentenceArray.Length; i++) { if (takenWords.Contains(i)) { continue; } if (Words.FindTypeOfItem(sentenceArray[i]).HasFlag(WordTypes.Preposition)) { takenWords.Add(i); sentence.Preposition = sentenceArray[i]; for (int n = i + 1; n < sentenceArray.Length; n++) { if (takenWords.Contains(n)) { continue; } if (sentenceArray[n] == "the" || sentenceArray[n] == "and") { takenWords.Add(n); continue; } if (n == sentenceArray.Length - 1 || Words.FindTypeOfItem(sentenceArray[n + 1]) != WordTypes.Other) { sentence.IndObject.Name = sentenceArray[n].ToLower(); takenWords.Add(n); break; } sentence.IndObject.Adjectives.Add(sentenceArray[n]); takenWords.Add(n); } } } //The final object should be the direct object. var dirObj = new GrammarObject(); for (int n = 0; n < sentenceArray.Length; n++) { if (takenWords.Contains(n)) { continue; } if (sentenceArray[n] == "the" || sentenceArray[n] == "and") { takenWords.Add(n); continue; } if (n == sentenceArray.Length - 1 || Words.FindTypeOfItem(sentenceArray[n + 1]) != WordTypes.Other || sentenceArray[n + 1] == "the") { dirObj.Name = sentenceArray[n]; takenWords.Add(n); break; } dirObj.Adjectives.Add(sentenceArray[n]); takenWords.Add(n); } //If there was no preposition, and also therefore no indirect object before it, but still the verb //can take a indirect object, the indirect object could be directly after the verb. //As in: "Give him the object". Which would mean that dirObj is actually the indirect object. //So now we have to check (if there was no indirect object detected.) if there is another object //to be discovered, if there is, that object is the direct, and dirObj the indirect. if (sentence.IndObject.Name == null) { for (int n = 0; n < sentenceArray.Length; n++) { if (takenWords.Contains(n)) { continue; } if (sentenceArray[n] == "the" || sentenceArray[n] == "and") { takenWords.Add(n); continue; } if (n == sentenceArray.Length - 1 || Words.FindTypeOfItem(sentenceArray[n + 1]) != WordTypes.Other || sentenceArray[n + 1] == "the") { sentence.DirObject.Name = sentenceArray[n]; takenWords.Add(n); break; } sentence.DirObject.Adjectives.Add(sentenceArray[n]); takenWords.Add(n); } if (sentence.DirObject.Name != null) { sentence.IndObject = dirObj; } else { sentence.DirObject = dirObj; } } else { sentence.DirObject = dirObj; } return(sentence); }