/// <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));
        }
示例#3
0
        /// <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());
        }