ТранскрибаторТранскрибатор
Практическая инструкция

Реплики одного говорящего из CSV: как сохранить выборку через Python

Отбор строк по speaker в отдельный CSV с сохранением колонок и исходного порядка. Как проверить метку участника и не потерять контекст соседних реплик.

Транскрибатор
ЗАПИСЬПЛАН РАБОТЫПроверьте метку speakerОтберите строкиСверьте выборку сисходникомПроверить результатОТ СЛОВ К РЕЗУЛЬТАТУ
Работа с реальной записьюНаглядный учебный примерШаблон для копирования
1Проверьте метку speaker2Отберите строки3Сверьте выборку сисходником
Метка определяет отбор; исходная таблица сохраняет контекст разговора.

Убедитесь, что метка соответствует человеку

Выборка нужна, например, чтобы подготовить реплики интервьюируемого к проверке или собрать все места, помеченные как неизвестный участник. Сначала сопоставьте speaker с реальными голосами в начале, середине и конце записи.

В учебном файле метка A обозначает выбранного участника. Значения A, «Спикер 1» и имя человека не равнозначны автоматически. Если метки были исправлены только в части таблицы, фильтр соберёт неполный набор. Основу можно подготовить через расшифровку аудио.

Сохраните структуру и точное условие

В примере сравнение чувствительно к регистру; крайние пробелы speaker убираются только для отбора. Все поля выбранных строк записываются в исходном порядке колонок. Исходный файл не изменяется.

Перед отбором проверьте структуру CSV. Код ожидает UTF-8 и запятую. Для другого разделителя задайте его явно в читателе и писателе.

Создайте новую выборку

Сохраните код как select_speaker.py рядом с transcript.csv, измените wanted и имя выходного файла, затем выполните python select_speaker.py или python3 select_speaker.py. Режим "x" защищает существующую выборку от перезаписи.

import csv
from pathlib import Path

wanted = "A"
with Path("transcript.csv").open(encoding="utf-8-sig", newline="") as source:
    reader = csv.DictReader(source)
    headers = reader.fieldnames or []
    if not {"speaker", "text"}.issubset(headers):
        raise ValueError("Нужны speaker и text")
    rows = list(reader)
if len(headers) != len(set(headers)) or any(None in row for row in rows):
    raise ValueError("Проверьте структуру CSV")
selected = [row for row in rows if (row["speaker"] or "").strip() == wanted]
with Path("speaker-A.csv").open("x", encoding="utf-8-sig", newline="") as target:
    writer = csv.DictWriter(target, fieldnames=headers)
    writer.writeheader()
    writer.writerows(selected)
print("Всего:", len(rows), "Выбрано:", len(selected))

Код загружает строки в память, поэтому рассчитан на обычную рабочую таблицу, а не неограниченный объём данных. Если выбрано 0 строк, проверьте метку и импорт. Пустая выборка не доказывает отсутствие участника в аудио.

Проверьте состав и контекст

На учебных строках A, B, A ожидаются две строки A в прежнем порядке. Сверьте таймкоды и последнюю выбранную реплику с исходником. Не сортируйте по тексту только ради аккуратного списка.

Для сводки количества записей каждой метки пригодится группировка speaker. Для цитаты возвращайтесь к вопросу и соседним репликам: выделение одного человека убирает часть контекста.

Учебный пример

Учебный пример: A, B, A

Вымышленная таблица показывает сохранение порядка выбранных реплик.

Исходная позицияspeakerВ выборке
1AПервая строка
2BНе включена
3AВторая строка
Условиеspeaker = AПроверить голосОтборДве записиСверить числаКонтекстОбщая таблицаВернуться к вопросу
Порядок выбранных строк сохраняется, но пропущенные участники остаются только в исходнике.

При передаче выборки укажите условие отбора и приложите ссылку на исходную версию документа в Вашем рабочем процессе.

Паспорт выборки говорящего

Рабочая заготовкаВыделите и скопируйте
Исходный CSV: [версия]
Выбранный speaker: [точное значение]
Проверка по голосу: [таймкоды]
Регистр: [учитывается]
Крайние пробелы: [Trim при сравнении]
Всего записей: [число]
Выбрано: [число]
Выходной файл: [имя]
Контекст проверен: [реплики]

Частые вопросы

Фильтр узнаёт человека по голосу?

Нет. Он отбирает по текстовой метке speaker.

Порядок реплик изменится?

В приведённом примере подходящие строки сохраняются в исходном порядке.

Почему выбрано 0 строк?

Проверьте значение speaker, регистр и корректность импорта.

Можно цитировать выборку без исходника?

Перед цитированием проверьте вопросы и соседние реплики в полном разговоре.