/// <summary> /// Фильтрация схемы параграфа /// </summary> private void Filter(ParagraphMap paragraphMap) { paragraphMap.FilterPositionsByTokens(TokenType.Email); paragraphMap.FilterPositionsByTokens(TokenType.URL); paragraphMap.FilterPositionsByTokens(TokenType.NumberSeparator); paragraphMap.FilterPositionsByMeasure(); paragraphMap.FilterPositionsByDomen(); //paragraphMap.FilterPositionsInQuotes(); paragraphMap.FilterPositionsBySuspensionPoints(); paragraphMap.FilterPositionsByInitials(); paragraphMap.FilterPositionsByReductions(); paragraphMap.FilterPositionsByYandexServices(); paragraphMap.FilterPositionsInSuccesion(); }
/// <summary> /// Выделение предложений из текста параграфа /// </summary> /// <param name="text">текст параграфа</param> /// <param name="isBlogText">флаг, что парсится блоговский текст</param> /// <returns>список предложений</returns> public List <Sentence> Select(string paragraph, bool isBlogText) { var paragraphMap = new ParagraphMap(_tokenSelector, paragraph, PotencialSentenceEnd.Select(paragraph)); Filter(paragraphMap); var sentenceEnds = paragraphMap.SentenceEndPositions().ToList(); if (isBlogText) { sentenceEnds = sentenceEnds .Union(_tokenSelector.SelectTokens(paragraph, TokenType.Smile).Select(_ => new PotencialSentenceEnd(_.Index, _.Index + _.Length))) .OrderBy(_ => _.Index) .ToList(); } return(CreateSentences(paragraphMap.Text, sentenceEnds)); }
/// <summary> /// Проверка, что параграф заканчивается на конец предложения /// </summary> /// <param name="paragraph">проверяемый параграф</param> /// <param name="nextParagraph">параграф, следующий за проверяемым</param> /// <returns>результат проверки</returns> private bool IsParagraphEndWithSentenceEnd(Paragraph paragraph, Paragraph nextParagraph) { var match = _numbering.Match(nextParagraph.Text); if (match.Success && (match.Index == 0)) { return(true); } List <PotencialSentenceEnd> endPosition = new List <PotencialSentenceEnd>(1); string trimedText = paragraph.Text.TrimEnd(); endPosition.Add(new PotencialSentenceEnd(trimedText.Length - 1, trimedText.Length)); ParagraphMap map = new ParagraphMap(_tokenSelector, paragraph.Text + nextParagraph.Text, endPosition); var tokenBeforeNoProper = _tokenSelector.SelectTokenFromTextEnd(trimedText, DictionaryType.BeforeNoProper); map.FilterPositionsByReductions(ToArray(null), ToArray(tokenBeforeNoProper)); return(map.SentenceEndPositions().Any()); }