Извлечение слов¶
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)]