Перейти к содержанию

Извлечение предложений

SentsExtractor(tokenizer=None, min_len=0, max_len=0)

Класс для извлечения предложений из текста.

Исключения:

  • ParameterError - граница длины, которая не целое число, отрицательная граница, минимум больше максимума.

Класс расширяет SentsExtractor ядра anyTS крючком русского языка: его токенизатор по умолчанию, метод sentenize(text), - предложения сегментатора anySeg: строка без конечного знака (заголовок, пункт списка) и предложение после точки без пробела - отдельные предложения.

from ruts import SentsExtractor

text = "Не имей 100 рублей, а имей 100 друзей. Так говорил проф. Иванов... А вы?"
SentsExtractor().extract(text)
('Не имей 100 рублей, а имей 100 друзей.', 'Так говорил проф. Иванов...', 'А вы?')

Параметры

Параметр Тип По умолчанию Описание
tokenizer Pattern / Callable None Токенизатор или регулярное выражение; по умолчанию метод sentenize
min_len int 0 Минимальная длина извлекаемого предложения в символах, 0 - без ограничения
max_len int 0 Максимальная длина извлекаемого предложения в символах, 0 - без ограничения

Примечание

Регулярное выражение в роли токенизатора - разделитель для re.split. Пустая строка - перевод строки, необязательные пробельные символы и еще один перевод строки - завершает предложение любого токенизатора: текст сначала режется по пустым строкам и каждая часть отдается токенизатору, поэтому заголовок или абзац без конечного знака - отдельное предложение, как и часть без слов, например строка звездочек, которую статистики не считают. С краев предложений до проверки границ длины срезаются пробельные символы, а пустые предложения отбрасываются.

Примечание

В качестве токенизатора можно передать пайплайн spaCy: tokenizer=lambda text: (sent.text for sent in nlp(text).sents).

Методы

extract(text) извлекает предложения из текста.

Параметр Тип По умолчанию Описание
text str - Строка текста

Текст, который не строка, и токенизатор, который нельзя вызвать или который возвращает не строки, дают SourceTypeError.

import re

SentsExtractor().extract("Что нового\n\nБыстрый импорт\nМеньше ошибок\n\nСпасибо за внимание!")
SentsExtractor(tokenizer=re.compile(r", ")).extract("Не имей 100 рублей, а имей 100 друзей")
('Что нового', 'Быстрый импорт', 'Меньше ошибок', 'Спасибо за внимание!')
('Не имей 100 рублей', 'а имей 100 друзей')