Конкорданс KWIC¶
kwic(source, keyword, window=5, by_lemma=False, ignore_case=True)
Конкорданс KWIC (keyword in context) - все вхождения слова или словосочетания с контекстом с обеих сторон. Вхождения ищутся среди слов текста по словоформе без учета регистра или с его учетом (ignore_case=False) или по лемме (by_lemma=True); ключевое слово лемматизируется как строка, так что с лемматизатором словосочетание можно записать в любой форме, а без него оно задается леммами. Слова строки и ключевого слова дает токенизатор, слова Doc - его токены: токенизатор, который режет строку так же, как пайплайн, находит в обоих одно и то же. Знаки препинания и символы словами не считаются; словоформы сравниваются в нормальной форме композиции Unicode (NFC), без мягких переносов.
Словосочетание не переходит через конец абзаца или предложения, если в ключевом слове нет конечного знака или начала предложения на том же месте (U.S. Army). Предложение кончается на границе Doc в любом месте между словами, включая открывающий знак, а без границ или с неполными границами (has_sents) - на начале предложения сегментатора предложений, по умолчанию на конечном знаке перед пробелом. Контекст - window слов с каждой стороны, как они записаны в тексте, со знаками препинания; пробельные символы схлопываются в один пробел, вхождения не пересекаются.
Функция вызывает kwic ядра anyTS с крючками русского языка: слова и предложения строки и ключевого слова дает сегментатор anySeg, лемма слова - ruMorph, в Doc с разметкой частей речи - с частью речи токена (ruts.utils.lemmatize), так что «стали» находится по «сталь» или по «стать» в зависимости от разметки. Знаки ударения и точка сокращения при сравнении не учитываются (руб. находится по руб), а словоформы (с ignore_case) и леммы сравниваются в нижнем регистре с ё как е. Части дефисного слова, разрезанного spaCy, склеиваются (кто-то - одно слово).
from ruts.corpus import kwic, print_kwic
text = (
"Кот сидел на окне и смотрел на птиц. Птицы улетели, и кот уснул на окне. "
"Завтра кот снова будет сидеть на окне и смотреть на птиц."
)
lines = kwic(text, "окно", by_lemma=True, window=3)
lines[0]
print_kwic(lines, width=20)
[line.keyword for line in kwic(text, "смотреть на птица", by_lemma=True)]
Concordance(start=13, end=17, left='Кот сидел на', keyword='окне', right='и смотрел на')
Кот сидел на окне и смотрел на
кот уснул на окне . Завтра кот снова
будет сидеть на окне и смотреть на
['смотрел на птиц', 'смотреть на птиц']
Параметры¶
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
source |
str / Doc |
- | Текст или объект Doc |
keyword |
str |
- | Слово или словосочетание |
window |
int |
5 |
Число слов контекста с каждой стороны |
by_lemma |
bool |
False |
Сравнивать леммы, а не словоформы |
ignore_case |
bool |
True |
Не учитывать регистр при сравнении словоформ |
Ключевое слово без слов, окно, которое не целое число или отрицательно, и by_lemma или ignore_case, который не bool, дают ParameterError; источник, который не строка и не Doc, ключевое слово, которое не строка, и крючок, который нельзя вызвать, - SourceTypeError.
Результат¶
Concordance(start, end, left, keyword, right)
Список именованных кортежей Concordance по порядку в тексте.
| Поле | Тип | Описание |
|---|---|---|
start |
int |
Позиция первого символа вхождения в тексте |
end |
int |
Позиция за последним символом вхождения |
left |
str |
Контекст слева |
keyword |
str |
Вхождение, как оно записано в тексте |
right |
str |
Контекст справа |
Выровненные строки¶
format_kwic(concordances, width=40)
Собирает строки в текст, выровненный по ключевому слову, по строке на вхождение: левый контекст обрезается слева и прижимается к правому краю, правый обрезается справа. Строки могут прийти из любого итерируемого объекта и берутся в нормальной форме композиции Unicode (NFC), так что ширина считает символы так, как они показываются.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
concordances |
list[Concordance] |
- | Строки конкорданса |
width |
int |
40 |
Ширина контекста в символах |
Строки, переданные строкой (str) или неитерируемым объектом, дают SourceTypeError, а width, который не целое число не меньше единицы, - ParameterError.
print_kwic(concordances, width=40)
Печатает результат format_kwic.