private IList <Tree> DoOneSentence(IList <ParserConstraint> constraints, IList <CoreLabel> words) { IParserQuery pq = parser.ParserQuery(); pq.SetConstraints(constraints); pq.Parse(words); IList <Tree> trees = Generics.NewLinkedList(); try { // Use bestParse if kBest is set to 1. if (this.kBest == 1) { Tree t = pq.GetBestParse(); if (t == null) { log.Warn("Parsing of sentence failed. " + "Will ignore and continue: " + SentenceUtils.ListToString(words)); } else { double score = pq.GetBestScore(); t.SetScore(score % -10000.0); trees.Add(t); } } else { IList <ScoredObject <Tree> > scoredObjects = pq.GetKBestParses(this.kBest); if (scoredObjects == null || scoredObjects.Count < 1) { log.Warn("Parsing of sentence failed. " + "Will ignore and continue: " + SentenceUtils.ListToString(words)); } else { foreach (ScoredObject <Tree> so in scoredObjects) { // -10000 denotes unknown words Tree tree = so.Object(); tree.SetScore(so.Score() % -10000.0); trees.Add(tree); } } } } catch (OutOfMemoryException e) { log.Error(e); // Beware that we can now get an OOM in logging, too. log.Warn("Parsing of sentence ran out of memory (length=" + words.Count + "). " + "Will ignore and try to continue."); } catch (NoSuchParseException) { log.Warn("Parsing of sentence failed, possibly because of out of memory. " + "Will ignore and continue: " + SentenceUtils.ListToString(words)); } return(trees); }
public virtual void SetConstraints(IList <ParserConstraint> constraints) { parserQuery.SetConstraints(constraints); }