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

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

ruts.extractors.WordsExtractor

Описание

Модуль для извлечения слов из текста. Позволяет использовать различные токенизаторы, фильтровать стоп-слова, числа и знаки препинания, проводить лемматизацию, формировать N-граммы, а также настраивать минимальную и максимальную длину извлекаемых слов.

Примечание

В качестве токенизитора по умолчанию используется функция tokenize из библиотеки razdel.

Примечание

В качестве морфологического анализитора для лемматизации по умолчанию используется класс MorphAnalyzer из библиотеки pymorphy3.

Параметры

Параметр Тип По умолчанию Описание
tokenizer Pattern/Сallable None Токенизатор или регулярное выражение
filter_punct bool True Фильтровать знаки препинания
filter_nums bool False Фильтровать числа, в том числе диапазоны, дроби и порядковые числительные (2020-2021, 5.5, 1,5, 3-й)
use_lexemes bool False Использовать леммы слов
stopwords List[str] None Список стоп-слов
lowercase bool False Конвертировать слова в нижний регистр
ngram_range Tuple[int, int] (1, 1) Нижняя и верхняя граница размера N-грамм
min_len int 0 Минимальная длина извлекаемого слова
max_len int 0 Максимальная длина извлекаемого слова

Примечание

Фильтры применяются по порядку: знаки препинания, числа, лемматизация, нижний регистр, стоп-слова, длина слова. Стоп-слова сравниваются уже после приведения к нижнему регистру, поэтому при lowercase=True список стоп-слов достаточно задать в нижнем регистре. Знаком препинания считается токен, целиком состоящий из знаков и символов, в том числе многосимвольный: ?!, !.., --, .

Методы

extract

Выполняет извлечение слов из текста.

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

Рассмотрим пример извлечения слов, используя в качестве токенов биграммы, а также выполнив предварительную фильтрацию стоп-слов и лемматизацию:

Пример

Код:

# Загрузка библиотек
import re
from nltk.corpus import stopwords
from ruts import WordsExtractor

# Подготовка данных
text = "Не имей 100 рублей, а имей 100 друзей"

# Извлечение предложений
we = WordsExtractor(
    use_lexemes=True, stopwords=stopwords.words("russian"), filter_nums=True, ngram_range=(1, 2)
)
we.extract(text)

Результат:

('иметь', 'рубль', 'иметь', 'друг', 'иметь_рубль', 'рубль_иметь', 'иметь_друг')

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

Для корректной работы данного примера необходимо иметь предварительно загруженный список стоп-слов библиотеки nltk на локальном компьютере. Сделать это можно, выполнив следующий код:

import nltk

nltk.download("stopwords")

get_most_common

Позволяет получить счетчик топ-слов текста. В качестве параметров принимает количество выводимых топ-слов.

Для иллюстрации работы метода воспользуемся кодом из предыдущего примера:

Пример

Код:

...

# Вывод топ-слов
we.get_most_common(3)

Результат:

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

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

Для корректной работы метода, он должен вызываться после извлечения слов методом extract.