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

Конкорданс 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.