Числа в расшифровке: как собрать цифровые фрагменты для проверки по аудио
CSV-список цифр и десятичных фрагментов из TXT через Python re. Контекст, номера строк и ограничения проверки дат, процентов, единиц и чисел словами.
Почему проверка числа включает соседние слова
В расшифровке важно не только различить 15 и 50. «До 15 минут», «примерно 15 минут» и «не больше 15 минут» описывают разные условия. Число без единицы измерения, периода или ограничения может исказить смысл даже при правильных цифрах.
Составьте задание на проверку: цены, сроки, количество, проценты, номера и даты. Если материал содержит критичные значения, прослушайте их адресно. Случайная выборка реплик не гарантирует попадание всех таких мест. В учебных примерах статьи числа вымышленные.
Что именно извлекает регулярное выражение
Пример находит последовательности базовых цифр 0–9 и необязательную десятичную часть с точкой или запятой: 15, 12.5, 12,5. Знак минуса, проценты, единицы и окружающие слова остаются в контексте. Это цифровые фрагменты для просмотра, а не полностью разобранные числовые значения.
Дата 05.10.2026 даст несколько совпадений, таймкод 01:25 — отдельные части. Число 1 500 тоже разделится. «Пятнадцать» не содержит цифр и не попадёт в отчёт. Не складывайте fragment и не считайте совпадения количеством реальных числовых фактов. Для другого формата требуется отдельное правило и проверка.
Сохраните адресный список и исходный текст
Положите transcript.txt в UTF-8 рядом с numeric_fragments.py и выполните python numeric_fragments.py. Результат numeric-fragments.csv создаётся в режиме x и не меняет исходник. line и column начинаются с единицы; позиции относятся к строкам конкретной версии TXT.
В context сохраняется до 40 символов с каждой стороны. Для длинной реплики откройте полную строку и ближайший разговор. Подсчёт символов Python не равен ширине текста на экране. Если программа отметила часть даты, расширьте проверяемый фрагмент вручную.
import re, csv
from pathlib import Path
text = Path("transcript.txt").read_text(encoding="utf-8-sig")
pattern = re.compile(r"[0-9]+(?:[.,][0-9]+)?")
with Path("numeric-fragments.csv").open("x", encoding="utf-8-sig", newline="") as file:
writer = csv.writer(file)
writer.writerow(["line", "column", "fragment", "context"])
for line_no, line in enumerate(text.splitlines(), 1):
for match in pattern.finditer(line):
context = line[max(0,match.start()-40):match.end()+40]
writer.writerow([line_no, match.start()+1, match.group(), context])
print("Найденные фрагменты требуют проверки по записи")
Сверьте значение с записью и оформите решение
Для каждого важного кандидата найдите аудиофрагмент, прослушайте до и после числа и выпишите полное утверждение. Сохраните значение, единицу, период, ограничение и говорящего. Если число неразборчиво, пометьте неопределённость; не подставляйте логичное значение как услышанное.
Текстовую основу можно подготовить через Транскрибатор. После подтверждённой правки сравните копии с помощью отчёта изменений. Укажите основание исправления, а не только новое число.
После редактуры повторите извлечение из новой версии. Номера строк старого отчёта могут сместиться. Для полноты дополнительно просмотрите числа словами и места без чёткого цифрового представления. Отсутствие совпадений не означает отсутствия количественных утверждений. Список содержит контекст исходника и требует тех же ограничений доступа.
Учебный пример: кандидат не равен числовому факту
Все значения вымышленные; таблица показывает границы извлечения.
| Фраза | Кандидат | Что проверить |
|---|---|---|
| До 15 минут | 15 | Ограничение и единицу |
| 12,5 процента | 12,5 | Десятичную часть и базу сравнения |
| Пятнадцать заявок | Не найдено | Просмотр чисел словами |
Фрагмент 15 не сообщает, что речь о минутах, рублях или процентах. Не переносите его в итог без контекста.
Карточка сверки числового утверждения
Версия TXT: [имя] Строка и позиция: [адрес] Кандидат: [фрагмент] Таймкод аудио: [место] Полное утверждение: [текст] Значение и единица: [данные] Период и ограничение: [слова] Решение: [подтверждено / исправлено / неясно] Основание: [прослушивание]
Частые вопросы
Это распознавание чисел из аудио?
Нет. Скрипт извлекает цифровые фрагменты из уже готового TXT.
Почему число словами не найдено?
Шаблон ищет цифры 0–9. Словесные числа проверяются отдельно.
Можно посчитать сумму всех fragment?
Нет. Совпадения могут быть частями дат, таймкодов и разных единиц.
Неясное число можно восстановить по логике?
Отметьте неопределённость и уточните источник. Не выдавайте предположение за услышанное.