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

Извлечение слов

WordsExtractor(tokenizer=None, filter_punct=True, filter_nums=False, use_lexemes=False, stopwords=None, lowercase=False, ngram_range=(1, 1), min_len=0, max_len=0)

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

Исключения:

  • ParameterError - ngram_range, который не пара целых чисел или чья нижняя граница меньше единицы или больше верхней, граница длины, которая не целое число, отрицательная граница, минимум больше максимума, переключатель, который не bool;
  • SourceTypeError - стоп-слова, которые не набор строк.

Класс расширяет WordsExtractor ядра anyTS крючками русского языка: токенизатор tokenize(text) - токены сегментатора anySeg по соглашениям UD (ruts.utils.iter_tokens): тире реплик, приклеенные к словам, - отдельные токены, число с разделителями - один токен, сокращение внутри предложения - с точкой (т., руб.), лемма lemmatize(word) - первый разбор морфологического анализатора ruMorph (ruts.utils.parse_word), а шаблон чисел number_pattern подходит и к диапазонам, дробям, порядковым числительным и числам с пробелами между разрядами: 2020-2021, 5.5, 1,5, 3-й, 90-х, 1 250 000. До любого токенизатора из текста снимаются знаки ударения и мягкие переносы, а й и ё из двух символов собираются в одну букву (ruts.utils.strip_marks).

from ruts import WordsExtractor

text = "Не имей 100 рублей, а имей 100 друзей"

we = WordsExtractor(use_lexemes=True, stopwords=["не", "а"], filter_nums=True, ngram_range=(1, 2))
we.extract(text)
('иметь', 'рубль', 'иметь', 'друг', 'иметь_рубль', 'рубль_иметь', 'иметь_друг')

Параметры

Параметр Тип По умолчанию Описание
tokenizer Pattern / Callable None Токенизатор или регулярное выражение; по умолчанию метод tokenize
filter_punct bool True Фильтровать знаки препинания
filter_nums bool False Фильтровать числа, подходящие под number_pattern
use_lexemes bool False Использовать леммы слов метода lemmatize
stopwords Collection[str] None Стоп-слова, сравниваются без учета регистра
lowercase bool False Конвертировать слова в нижний регистр
ngram_range tuple[int, int] (1, 1) Нижняя и верхняя граница размера N-грамм
min_len int 0 Минимальная длина извлекаемого слова в символах, 0 - без ограничения
max_len int 0 Максимальная длина извлекаемого слова в символах, 0 - без ограничения

Примечание

Регулярное выражение в роли токенизатора - разделитель для re.split. Фильтры применяются по порядку: знаки препинания, числа, лемматизация, нижний регистр, стоп-слова, длина слова. Знак препинания - токен только из знаков и символов, в том числе многосимвольный: ?!, --, …, € (anyts.utils.is_punctuation). Пустые и пробельные токены отбрасываются до фильтров. N-граммы соединяют слова через _.

Методы

extract(text) извлекает слова из текста.

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

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

get_most_common(n=10) возвращает топ-слова текста списком пар (слово, частота), начиная с самого частого.

Параметр Тип По умолчанию Описание
n int 10 Количество топ-слов

Количество, которое не целое число не меньше единицы, дает ParameterError.

Предупреждение

Метод должен вызываться после извлечения слов методом extract.

we.get_most_common(3)
[('иметь', 2), ('рубль', 1), ('друг', 1)]