示例#1
0
        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);
        }
示例#2
0
        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);
        }