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

Случайная выборка реплик для проверки расшифровки: Python sample и сохранённый список

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

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

Что позволяет выборочная проверка

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

Установите единицу отбора: здесь это логическая CSV-запись, обычно реплика. Длинная и короткая реплики имеют одинаковую вероятность попадания, поэтому это не случайная выборка секунд аудио. Если нужны оценки качества по длительности, требуется другая схема. Число десять в примере учебное, а не обоснованный стандарт контроля.

Подготовьте таблицу и отдельные обязательные места

Нужен CSV с колонкой text; speaker и timecode сохранятся, если присутствуют. Выполните проверку структуры до отбора. Программа считает записи через DictReader, поэтому перенос внутри поля не становится отдельной репликой.

Имена, числа, отрицания, смены говорящих и неразборчивые участки проверяйте отдельным адресным списком. Не называйте такой список случайным: он сформирован по риску. Храните оба основания отбора, чтобы было понятно, почему прослушаны конкретные места.

Сохраните выборку и параметры запуска

Сохраните код как qa_sample.py рядом с transcript.csv и выполните python qa_sample.py. В примере k равно 10. Если записей меньше, выбираются все; если их нет, получается пустой список. sample отбирает индексы без повторения, а sorted возвращает выбранные реплики в исходном порядке для удобства проверки.

random.Random(seed) создаёт отдельный генератор, не зависящий от других случайных вызовов в программе. Для повторяемости нужно сохранить источник и среду, но надёжная точка контроля — фактические номера и готовый qa-sample.csv. Python может менять алгоритмы; один seed не обещает идентичность между всеми версиями.

import csv, random, sys, hashlib, json
from pathlib import Path
source = Path("transcript.csv")
with source.open(encoding="utf-8-sig", newline="") as file:
    reader = csv.DictReader(file)
    headers = reader.fieldnames or []
    rows = list(reader)
if len(headers) != len(set(headers)) or "text" not in headers:
    raise ValueError("Проверьте заголовки")
if any(None in row or any(v is None for v in row.values()) for row in rows):
    raise ValueError("Неполные записи или лишние поля")
k, seed = 10, 20261005
indices = sorted(random.Random(seed).sample(range(len(rows)), min(k, len(rows))))
if "source_record" in headers: raise ValueError("Колонка source_record уже занята")
with Path("qa-sample.csv").open("x", encoding="utf-8-sig", newline="") as file:
    writer = csv.DictWriter(file, fieldnames=["source_record"] + headers)
    writer.writeheader()
    for i in indices:
        writer.writerow({"source_record": i+1, **rows[i]})
meta = {"source": str(source), "sha256": hashlib.sha256(source.read_bytes()).hexdigest(),
        "python": sys.version, "seed": seed, "population": len(rows),
        "requested": k, "selected": len(indices), "records": [i+1 for i in indices]}
with Path("qa-sample-meta.json").open("x", encoding="utf-8") as file:
    json.dump(meta, file, ensure_ascii=False, indent=2)
print("Выбрано записей:", len(indices))

Проверьте выбранные места по записи

source_record начинается с единицы и обозначает номер CSV-записи после заголовка, а не физическую строку файла. Для каждой выбранной реплики откройте аудио, прослушайте фрагмент с соседними репликами и зафиксируйте ошибку, решение и основание. Отдельно проверьте правильность speaker и времени.

Подготовить текст записи можно через Транскрибатор. После исправлений полезен отчёт отличий текстовой версии. Не переносите заключение «ошибок в десяти репликах нет» на весь файл без отдельной методики оценки.

Результаты открываются в режиме x. Если второй файл не создался после первого, сохраните полученную выборку и выясните причину. До передачи проверьте наличие CSV и JSON, количество строк и совпадение выбранных номеров. Контрольная сумма отмечает байтовую версию источника и не защищает от раскрытия содержания.

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

Учебный план контроля

Числа иллюстрируют учёт, а не рекомендуемый объём статистической выборки.

МатериалПроверкаВывод
10 случайных репликПрослушать выбранные номераРезультат этих мест
Имена и числаАдресный списокПроверка важных фактов
Остальные репликиЕщё не провереныКачество не подтверждено
ПопуляцияCSV-записиПроверить границыОтборБез возвращенияСохранить индексыПрослушиваниеСоседний контекстЗаписать результат
Случайный отбор и контроль рискованных мест имеют разные основания.

Если обнаружены систематические ошибки, расширьте проверку по понятному правилу и сохраните новый список. Не выбирайте вручную удобные строки взамен сложных.

Лист проверки выборки

Рабочая заготовкаВыделите и скопируйте
CSV и SHA-256: [источник]
Версия Python: [значение]
Seed и k: [параметры]
Всего записей: [число]
Фактические номера: [список]
Рискованные места: [отдельный список]
Ошибки и основания: [записи]
Что остаётся непроверенным: [границы]

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

Seed достаточно для повторения?

Нет. Сохраните файл, среду и фактический список выбранных записей.

Почему одна реплика не выбрана дважды?

sample выбирает индексы без возвращения. Одинаковый текст в разных записях всё равно может встретиться.

Десять реплик подтверждают качество записи?

Нет. Это учебный объём, а не обоснование качества всего материала.

Это случайный отбор секунд аудио?

Нет. Единицей является CSV-запись, независимо от её длительности.