Ejemplo n.º 1
0
        public void AddSentence(string sentence)
        {
            sentence     = sentence.ToLower();
            sentenceNode = null;

            List <ZZNode <string> > sentenceList = new List <ZZNode <string> >();

            string[] words = sentence.Split(' ');
            foreach (string word in words)
            {
                if (regex.Match(word).Success)
                {
                    wordNode = new ZZNode <string>(word);
                    if (!this.wordList.Exists(WordEquals))
                    {
                        wordNode = new ZZNode <string>(word);
                        this.wordList.Add(wordNode);
                    }
                    sentenceList.Add(wordNode);
                }
            }
            if (sentenceList.Count == 0)
            {
                return;
            }
            sentenceNode = new ZZNode <List <ZZNode <string> > >(sentenceList);
            if (!lines.Exists(ListEquals))
            {
                lines.Add(sentenceNode);
            }

            for (int x = 0; x < sentenceList.Count; x++)
            {
                ZZNode <string> w = sentenceList[x];
                w.AddSideLink(new ZZLink <ZZNode <string>, ZZNode <List <ZZNode <string> > > >(sentenceNode, w, 2));
            }

            if (!lastSentence.Equals(sentenceNode))
            {
                lastSentence.AddNextLink(new ZZLink <ZZNode <List <ZZNode <string> > >, ZZNode <List <ZZNode <string> > > >(lastSentence, sentenceNode, 3));
                sentenceNode.AddBackLink(new ZZLink <ZZNode <List <ZZNode <string> > >, ZZNode <List <ZZNode <string> > > >(sentenceNode, lastSentence, 3));
            }
            lastSentence = sentenceNode;

            for (int x = 0; x < sentenceList.Count; x++)
            {
                ZZNode <string> word = sentenceList[x];

                if (x == 0 && x == words.Length - 1)
                {
                    //add terminator to last and next
                    wordNode = new ZZNode <string>(string.Empty);
                    wordList.Exists(WordEquals);
                    ZZLink <ZZNode <string>, ZZNode <string> > backNode = new ZZLink <ZZNode <string>, ZZNode <string> >(wordNode, word, 1);
                    ZZLink <ZZNode <string>, ZZNode <string> > nextNode = new ZZLink <ZZNode <string>, ZZNode <string> >(word, wordNode, 1);
                    wordNode.AddNextLink(backNode);
                    wordNode.AddBackLink(backNode);
                    word.AddBackLink(nextNode);
                    word.AddNextLink(nextNode);
                }
                else if (x == 0)
                {
                    //add terminator to last
                    wordNode = new ZZNode <string>(string.Empty);
                    wordList.Exists(WordEquals);
                    wordNode.AddNextLink(new ZZLink <ZZNode <string>, ZZNode <string> >(wordNode, word, 1));
                    word.AddBackLink(new ZZLink <ZZNode <string>, ZZNode <string> >(word, wordNode, 1));
                    wordNode = new ZZNode <string>(words[x + 1]);
                    if (wordList.Exists(WordEquals))
                    {
                        word.AddNextLink(new ZZLink <ZZNode <string>, ZZNode <string> >(word, wordNode, 1));
                        wordNode.AddBackLink(new ZZLink <ZZNode <string>, ZZNode <string> >(wordNode, word, 1));
                    }
                }
                else if (x == words.Length - 1)
                {
                    //add terminator to next
                    wordNode = new ZZNode <string>(string.Empty);
                    wordList.Exists(WordEquals);
                    wordNode.AddBackLink(new ZZLink <ZZNode <string>, ZZNode <string> >(wordNode, word, 1));
                    word.AddNextLink(new ZZLink <ZZNode <string>, ZZNode <string> >(word, wordNode, 1));
                }
                else
                {
                    //treat it normally
                    wordNode = new ZZNode <string>(words[x + 1]);
                    if (wordList.Exists(WordEquals) && wordNode != word)
                    {
                        word.AddNextLink(new ZZLink <ZZNode <string>, ZZNode <string> >(word, wordNode, 1));
                        wordNode.AddBackLink(new ZZLink <ZZNode <string>, ZZNode <string> >(wordNode, word, 1));
                    }
                }
            }
        }