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

Python difflib: как сделать HTML-отчёт о правках расшифровки

Сравните две версии TXT через difflib.HtmlDiff, сохраните таблицу с подсветкой и проверьте исправления по записи. Пример Python без дополнительных библиотек.

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

Подготовьте сопоставимые версии

Этот способ пригодится, когда редактор прислал исправленный TXT и Вы хотите передать проверяющему понятную таблицу «было — стало». Получатель открывает HTML-файл в обычном браузере; Python требуется только тому, кто собирает отчёт. В примере используется стандартная библиотека, дополнительные пакеты устанавливать не нужно.

Сначала получите исходный текст через расшифровку аудио. Сохраните его как original.txt, а отредактированную версию — как edited.txt. Обе версии должны относиться к одной записи. Если из одной копии уже удалили целую тему, а в другой только исправили пунктуацию, отчёт будет показывать разные виды изменений одновременно.

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

Соберите таблицу через HtmlDiff

Положите оба TXT рядом с файлом compare.py. Следующий код читает UTF-8, создаёт полный отчёт и сохраняет его в comparison.html. Запускайте его из этой папки командой python compare.py или используйте установленный в Вашей системе запуск Python 3.

from pathlib import Path
from difflib import HtmlDiff
from html import escape

left = Path("original.txt")
right = Path("edited.txt")

before = left.read_text(encoding="utf-8-sig").splitlines()
after = right.read_text(encoding="utf-8-sig").splitlines()

report = HtmlDiff(wrapcolumn=80).make_file(
    before, after,
    fromdesc=escape(left.name),
    todesc=escape(right.name),
    context=False,
    charset="utf-8",
)
Path("comparison.html").write_text(report, encoding="utf-8")

Откройте comparison.html и найдите знакомое исправление. В учебном примере «Срок — пятница» заменяется на «Срок — четверг». Посмотрите, в какой колонке находится новая версия: не принимайте левую сторону за итоговый документ.

Названия файлов проходят через escape, потому что подписи колонок HtmlDiff допускают HTML. Текстовые строки передаются отдельно. Отчёт не изменяет исходные TXT, но содержит их текст — передавайте его тем же проверяющим, которым предназначены эти версии.

Выберите полный или сокращённый отчёт

Для первого просмотра оставьте context=False: так Вы увидите весь документ вместе с изменениями. Для длинного интервью можно поставить context=True и numlines=3. Тогда рядом с изменёнными строками останется ограниченный контекст. Это настройка отображения, а не удаление текста из исходника.

wrapcolumn=80 переносит длинные строки внутри отчёта. Число 80 выбрано для примера: измените его, если Вам удобнее более широкая таблица. Если в браузере по-прежнему приходится прокручивать по горизонтали, уменьшите масштаб или выберите меньшее значение.

Если нужен компактный текстовый список изменений для терминала, полезен git diff без репозитория. HTML-таблица удобнее для человека, которому нужно сравнить две стороны визуально.

Проверьте смысл и сохраните решение

Подсветка не доказывает, что редакция верна. Исправление «пятнадцать» на «пятьдесят», добавление частицы «не» и смена фамилии требуют прослушивания. Сначала найдите реплику по сохранённому таймкоду, затем подтвердите или отклоните правку в отдельном списке.

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

Если отчёт выглядит почти полностью изменённым, сравните формат строк и порядок абзацев. При ошибке декодирования установите настоящую кодировку исходных файлов: параметр errors="ignore" может незаметно выбросить буквы. Для структурированной передачи реплик воспользуйтесь экспортом расшифровки в CSV.

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

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

Это вымышленные реплики. Таблица показывает, какие решения остаются за проверяющим после автоматического сравнения.

Исходная версияРедакцияЧто проверить
Срок — пятницаСрок — четвергПрослушать дату
Бюджет 15000Бюджет 50000Прослушать число
Согласовали запускНе согласовали запускПроверить частицу «не»
Две колонкиСлева исходникСправа новая версияПодсветкаРазличие буквПрослушать репликуРешениеПринято или отклоненоСохранить основание
Визуальное различие — повод проверить реплику, а не автоматическое доказательство ошибки.

После проверки сохраните итоговый TXT с новым номером версии. HTML-отчёт оставьте рядом с замечаниями: он объяснит, какие изменения рассматривались.

Лист проверки правок

Рабочая заготовкаВыделите и скопируйте
Запись: [имя аудиофайла]
Исходная версия: [original.txt, номер]
Редакция: [edited.txt, номер]
Отчёт: [comparison.html]
Таймкод: [время]
Было: [цитата]
Стало: [цитата]
Решение: [принять / отклонить / уточнить]
Основание: [что слышно на записи]

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

Нужно устанавливать difflib отдельно?

Нет. Модуль входит в стандартную библиотеку Python. Установленный Python 3 нужен для создания отчёта.

Почему выделены почти все строки?

Проверьте переносы абзацев, порядок реплик и используемые версии. Построчное сравнение зависит от структуры текстовых файлов.

Отчёт исправляет расшифровку?

Нет. Он показывает различия. Редакцию и решение о спорных словах Вы сохраняете отдельно.

Можно передать HTML вместо обоих TXT?

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