예제 #1
0
        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())));
            }
        }