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

JSONL для расшифровки: как хранить одну реплику на строку и проверить файл

Как подготовить собственный JSONL с репликами: UTF-8, экранирование переносов, проверка каждой строки через Python и устойчивые идентификаторы.

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

Выберите явную схему рабочего файла

JSONL удобен для последовательной обработки большого набора реплик собственным скриптом. В отличие от одного JSON-массива каждая строка является самостоятельным значением. Для понятного рабочего формата используйте объекты одной схемы и храните описание полей рядом.

После расшифровки аудио можно подготовить id, timecode, speaker и text. Это предлагаемый пользовательский формат, а не обещание экспорта JSONL из Транскрибатора. Не объявляйте свою схему стандартом всех систем распознавания.

Метка speaker обозначает участника в рабочем тексте. Если человек не установлен по записи, сохраняйте У01 вместо догадки об имени. Поле timecode должно иметь описанные единицы и шкалу исходника.

Соблюдайте границу физической строки

JSON Lines использует UTF-8. Каждая строка должна содержать корректное JSON-значение; пустая строка не является записью этого формата. Для собственного набора реплик дополнительно требуйте объект с выбранными полями.

В Python применяйте json.dumps(row, ensure_ascii=False) и затем добавляйте "\n". Не используйте indent для многострочного форматирования отдельного объекта в JSONL. Многострочный красивый JSON и одна запись на строку решают разные задачи.

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

Проверьте структуру и обязательные поля

Читатель JSONL должен обрабатывать строки последовательно. Для каждой строки вызовите json.loads и проверьте тип полученного значения. Номер физической строки удобно использовать в сообщении об ошибке, чтобы быстро найти повреждённую запись.

После синтаксиса проверьте собственную схему: id уникален, text является строкой, таймкод присутствует в ожидаемом формате. Корректный JSON может содержать число или null; это допустимо формату, но не Вашей таблице реплик.

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

Сверьте обратное чтение с источником

На учебных репликах сравните объекты до записи и после чтения. Включите кавычки, русские буквы и перенос внутри text. Затем проверьте начало и конец настоящего материала. Структурная проверка не обнаружит слово, ошибочно распознанное ещё до создания JSONL.

Если результат нужен человеку в таблице, подготовьте отдельный CSV по правилам сохранения текстовых полей. Простая замена расширения jsonl на csv не преобразует данные.

Храните исходную запись и полный текст отдельно от производной выгрузки. Если один объект представляет выбранную цитату, подпишите это явно: набор цитат не должен выдаваться за полную расшифровку разговора.

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

Учебный пример: проверка на коротком фрагменте

Ниже вымышленная запись. Имена, время и содержание нужны только для объяснения порядка работы.

ПроверкаУчебное значениеРезультат
СтруктураОдин объект на строкеjson.loads читает строку
ТекстРусские буквы и переносЗначение восстановлено
Схемаid и text присутствуютЗапись пригодна для задачи
СтруктураОдин объект на строкеjson.loads читает строкуТекстРусские буквы и переносЗначение восстановленоСхемаid и text присутствуютЗапись пригодна для задачи
Каждая контрольная точка связана с конкретным результатом; отсутствие подтверждения оставляйте открытым вопросом.

Повторите проверку на своей копии записи. Учебные значения не описывают Ваш файл и не подтверждают качество всей расшифровки.

Заготовка для собственной проверки

Рабочая заготовкаВыделите и скопируйте
import json

rows = [{"id": "r1", "timecode": "00:01:20",
         "speaker": "У01", "text": "Ответ\nУточнение"}]
with open("transcript.jsonl", "w", encoding="utf-8") as f:
    for row in rows:
        f.write(json.dumps(row, ensure_ascii=False) + "\n")
with open("transcript.jsonl", encoding="utf-8") as f:
    restored = [json.loads(line) for line in f]
assert restored == rows
assert all(isinstance(row, dict) for row in restored)

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

JSONL — это один JSON-массив?

Нет. Это отдельные JSON-значения на отдельных строках.

Можно использовать indent=2?

Для обычного JSON можно, но многострочный объект нарушит выбранную организацию JSONL.

Пустая строка — допустимая запись?

Нет. В JSON Lines каждая строка должна содержать JSON-значение.

Корректный синтаксис подтверждает речь?

Нет. Содержание сверяют с аудиозаписью отдельно.