/// <summary>Adds a sentence final punctuation mark to sentences that lack one.</summary> /// <remarks> /// Adds a sentence final punctuation mark to sentences that lack one. /// This method adds a period (the first sentence final punctuation word /// in a parser language pack) to sentences that don't have one within /// the last 3 words (to allow for close parentheses, etc.). It checks /// tags for punctuation, if available, otherwise words. /// </remarks> /// <param name="sentence">The sentence to check</param> /// <param name="length">The length of the sentence (just to avoid recomputation)</param> private bool AddSentenceFinalPunctIfNeeded(IList <IHasWord> sentence, int length) { int start = length - 3; if (start < 0) { start = 0; } ITreebankLanguagePack tlp = op.tlpParams.TreebankLanguagePack(); for (int i = length - 1; i >= start; i--) { IHasWord item = sentence[i]; // An object (e.g., CoreLabel) can implement HasTag but not actually store // a tag so we need to check that there is something there for this case. // If there is, use only it, since word tokens can be ambiguous. string tag = null; if (item is IHasTag) { tag = ((IHasTag)item).Tag(); } if (tag != null && !tag.IsEmpty()) { if (tlp.IsSentenceFinalPunctuationTag(tag)) { return(false); } } else { string str = item.Word(); if (tlp.IsPunctuationWord(str)) { return(false); } } } // none found so add one. if (op.testOptions.verbose) { log.Info("Adding missing final punctuation to sentence."); } string[] sfpWords = tlp.SentenceFinalPunctuationWords(); if (sfpWords.Length > 0) { sentence.Add(new Word(sfpWords[0])); } return(true); }
private Tree FixNonUnaryRoot(Tree t, ITreeFactory tf) { IList <Tree> kids = t.GetChildrenAsList(); if (kids.Count == 2 && t.FirstChild().IsPhrasal() && tlp.IsSentenceFinalPunctuationTag(t.LastChild().Value())) { IList <Tree> grandKids = t.FirstChild().GetChildrenAsList(); grandKids.Add(t.LastChild()); t.FirstChild().SetChildren(grandKids); kids.Remove(kids.Count - 1); t.SetChildren(kids); t.SetValue(tlp.StartSymbol()); } else { t.SetValue(nonUnaryRoot); t = tf.NewTreeNode(tlp.StartSymbol(), Java.Util.Collections.SingletonList(t)); } return(t); }