Извлечение символьных N-грамм¶
ruts.extractors.CharNgramsExtractor
Описание¶
Модуль для извлечения символьных N-грамм из текста - последовательностей из N символов, взятых окном по строке. Символьные N-граммы - стандартный признак стилометрии и атрибуции авторства (Stamatatos 2009): они захватывают морфологию, пунктуацию и типичные сочетания букв, не требуя лемматизации. Список N-грамм подается в delta как единицы текста вместо слов.
Пробельные символы предварительно схлопываются в один пробел, знаки препинания сохраняются: пробел и знак внутри N-граммы - тоже стилистический сигнал. При within_words=True N-граммы не пересекают границ слов: текст режется токенизатором на слова, знаки препинания отбрасываются, слова короче N N-грамм не дают.
Примечание
В качестве токенизатора слов для within_words по умолчанию используется функция tokenize из библиотеки razdel.
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n |
int | 2 |
Длина N-граммы в символах |
lowercase |
bool | False |
Конвертировать текст в нижний регистр |
within_words |
bool | False |
Брать N-граммы только внутри слов |
tokenizer |
Pattern/Сallable | None |
Токенизатор слов для within_words или регулярное выражение |
Методы¶
extract¶
Выполняет извлечение N-грамм из текста.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
text |
str | - |
Строка текста |
Пример
from ruts import CharNgramsExtractor
text = "Кот сидел на окне, а пёс - на полу."
ce = CharNgramsExtractor()
ce.extract(text)[:8]
# ('Ко', 'от', 'т ', ' с', 'си', 'ид', 'де', 'ел')
ce = CharNgramsExtractor(n=3, lowercase=True)
ce.extract(text)[:6]
# ('кот', 'от ', 'т с', ' си', 'сид', 'иде')
CharNgramsExtractor(n=3, lowercase=True, within_words=True).extract(text)
# ('кот', 'сид', 'иде', 'дел', 'окн', 'кне', 'пёс', 'пол', 'олу')
get_most_common¶
Возвращает список самых частых N-грамм последнего извлечения.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
n |
int | 10 |
Количество N-грамм |
Пример
ce = CharNgramsExtractor(n=3, lowercase=True)
ce.extract(text)
ce.get_most_common(2)
# [(' на', 2), ('на ', 2)]