Конкорданс расшифровки: как собрать все контексты слова в CSV через Python
Таблица «слева — слово — справа» для анализа термина в разговоре. Точное совпадение токена, номера строк, границы контекста и проверка словоформ.
Для чего смотреть слово во всех контекстах
После интервью нужно понять, что участник называл «сроком»: дату обещания, длительность работы, время ожидания или установленное ограничение. Список частот покажет количество, а конкорданс — разные употребления в ближайших словах. Проверяющий может сопоставить фразы, не перечитывая весь документ с начала.
Это отдельная задача от частотного списка. Одинаковый токен способен иметь разные значения, а одна тема — обозначаться несколькими словами. Вывод о смысле требует полного фрагмента и контекста разговора. В статье примеры учебные.
Установите границы запроса
В примере ищется один буквенный токен срок без учёта регистра. Совпадут Срок и срок, но не сроки, сроками или просрочка. Условия вокруг токена исключают прилегание символа класса \w: букв, цифр и подчёркивания в обычном Unicode-режиме Python.
Дефис и пунктуация могут быть границей. Токен внутри сложного выражения может попасть в список и потребовать проверки. Для полноты заранее выпишите нужные формы и запускайте отдельные запросы, сохраняя названия результатов. Не выдавайте поиск одного написания за лемматизацию или анализ всех вариантов понятия.
Сохраните таблицу ближайших слов
Сохраните transcript.txt в UTF-8 и код как concordance.py. Выполните python concordance.py. Файл concordance.csv создаётся отдельно в режиме x. Чтобы исследовать другой токен, измените word и имя результата. Скрипт оставляет исходный TXT без изменений.
left и right содержат до 60 символов слева и справа внутри одной физической строки. match сохраняет реальное написание из текста. line и column начинаются с единицы. Поиск ограничен строками: соседний абзац не становится частью окна. Если текст разбит жёсткими переносами по ширине, границы окна могут быть слишком узкими.
import re, csv
from pathlib import Path
text = Path("transcript.txt").read_text(encoding="utf-8-sig")
word = "срок"
if not re.fullmatch(r"[А-Яа-яЁёA-Za-z]+", word):
raise ValueError("В примере нужен один буквенный токен")
pattern = re.compile(r"(?<!\w)" + re.escape(word) + r"(?!\w)", re.IGNORECASE)
with Path("concordance.csv").open("x", encoding="utf-8-sig", newline="") as file:
writer = csv.writer(file)
writer.writerow(["line", "column", "left", "match", "right"])
for line_no, line in enumerate(text.splitlines(), 1):
for match in pattern.finditer(line):
writer.writerow([line_no, match.start()+1,
line[max(0,match.start()-60):match.start()], match.group(),
line[match.end():match.end()+60]])
print("Контексты сохранены; формы слова проверяйте отдельно")
Прочитайте контексты и вернитесь к записи
Откройте CSV и отметьте для каждого употребления: предмет, условие, говорящего и предполагаемое значение. Не сортируйте так, чтобы потерять адрес источника. Короткое окно может обрезать отрицание или ответ предыдущего участника; откройте полную строку и соседние реплики, прежде чем кодировать смысл.
Текстовую основу разговора можно получить через Транскрибатор. При большом наборе интервью сначала выполните разделение по источникам, чтобы одно слово из разных бесед не стало одним утверждением.
Добавьте к рабочей таблице собственные колонки «значение», «основание» и «проверено по аудио». Сохраните неоднозначные места отдельно. Количество совпадений не измеряет важность термина, частоту проблемы среди клиентов или согласие участников. Пустой результат может означать другую словоформу, невидимый знак или ошибку написания, а не отсутствие обсуждения.
Учебный пример: три значения слова «срок»
Вымышленные фразы показывают, почему частотность не заменяет контекст.
| Слева | Слово | Справа |
|---|---|---|
| Обещанный | срок | — пятница |
| Обычный | срок | работы — два дня |
| За этот | срок | мы не получили ответа |
Не называйте все три употребления одной причиной задержки: в примере речь о разных свойствах времени.
Лист анализа конкорданса
TXT и версия: [имя] Токен и формы: [список] Правила регистра и границ: [описание] Окно контекста: [размер] Адрес совпадения: [строка / позиция] Полный фрагмент: [проверка] Значение и основание: [запись] Неоднозначные места: [список]
Частые вопросы
Это поиск всех словоформ?
Нет. Пример ищет точный токен без учёта регистра.
Конкорданс определяет значение автоматически?
Нет. Таблица помогает проверяющему сравнить употребления.
Почему соседний абзац не виден?
Окно ограничено одной физической строкой. Откройте полный исходник.
Число совпадений равно важности темы?
Нет. Важность и смысл требуют отдельной оценки контекста.