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