private void AddChunkEvents(List <SharpEntropy.TrainingEvent> events, Parse[] chunks) { List <string> tokens = new List <string>(); List <string> tags = new List <string>(); List <string> predicates = new List <string>(); for (int currentChunk = 0; currentChunk < chunks.Length; currentChunk++) { Parse chunkParse = chunks[currentChunk]; if (chunkParse.IsPosTag) { tokens.Add(chunkParse.ToString()); tags.Add(chunkParse.Type); predicates.Add(MaximumEntropyParser.OtherOutcome); } else { bool isStart = true; string chunkType = chunkParse.Type; Parse[] childParses = chunkParse.GetChildren(); foreach (Parse tokenParse in childParses) { tokens.Add(tokenParse.ToString()); tags.Add(tokenParse.Type); if (isStart) { predicates.Add(MaximumEntropyParser.StartPrefix + chunkType); isStart = false; } else { predicates.Add(MaximumEntropyParser.ContinuePrefix + chunkType); } } } } for (int currentToken = 0; currentToken < tokens.Count; currentToken++) { events.Add(new SharpEntropy.TrainingEvent(predicates[currentToken], mChunkContextGenerator.GetContext(currentToken, tokens.ToArray(), tags.ToArray(), predicates.ToArray()))); } }