Повторяющиеся соседние строки расшифровки: как найти кандидаты на дубль через Python
CSV-отчёт одинаковых соседних строк TXT с номерами для проверки по записи. Почему повтор нельзя автоматически удалять и что пропускает точное сравнение.
Какие повторы ищет этот способ
При сборке расшифровки из частей один фрагмент иногда попадает в текст дважды. Перед редактурой полезно получить адресный список соседних одинаковых строк. Метод подходит для TXT, где одна реплика или один абзац размещены на одной физической строке. Если редактор перенёс абзац по ширине окна в реальные строки, сравнение будет оценивать кусочки, а не реплики.
Не путайте дублирование текста с повтором речи. Участник мог дважды сказать «Да, согласен» или процитировать предыдущую фразу. Одинаковые слова не доказывают ошибку распознавания. Сначала сохраните исходник и запишите, как он был собран из записей или выгрузок.
Выберите строгое правило сравнения
В примере сравниваются две соседние строки в точности, включая пробелы, регистр, метки говорящего и времени. Переносы разделяют строки и не входят в сравниваемый текст. Пустые и состоящие только из пробелов строки исключаются. Строки «Да» и «Да.» не совпадут; «[00:10] Да» и «[00:11] Да» также различаются.
Это намеренное ограничение. Удаление пунктуации, времени и имён делает совпадений больше, но способно смешать независимые реплики. Для первого прохода используйте точное сравнение, затем вручную рассмотрите подозрительные области. Правила переносов строк TXT помогут понять исходную структуру.
Сохраните отчёт с адресами совпадений
Нужен Python 3.10 или новее: pairwise появился в этой версии и возвращает последовательные перекрывающиеся пары. Сохраните transcript.txt в UTF-8, поместите код в adjacent_duplicates.py и выполните python adjacent_duplicates.py. Результат adjacent-duplicates.csv создаётся отдельно в режиме x.
Номера начинаются с единицы и относятся к конкретной версии исходного TXT. При трёх одинаковых строках программа запишет пары 1–2 и 2–3: это один участок повторов, а не обязательно две независимые ошибки. Список хранится в памяти; для большого документа нужна построчная реализация с предыдущей строкой.
import csv
from pathlib import Path
from itertools import pairwise
text = Path("transcript.txt").read_text(encoding="utf-8-sig")
lines = list(enumerate(text.splitlines(), 1))
with Path("adjacent-duplicates.csv").open("x", encoding="utf-8-sig", newline="") as target:
writer = csv.writer(target)
writer.writerow(["first_line", "second_line", "text"])
for (n1, a), (n2, b) in pairwise(lines):
if a.strip() and a == b:
writer.writerow([n1, n2, a])
print("Отчёт готов. Ни одна строка исходника не удалена")
Проверьте участок и зафиксируйте решение
Откройте обе строки, соседние реплики и соответствующий фрагмент аудио. Сверьте время и границу склейки файлов. Если текст повторяется, а в источнике реплика одна, удаление в рабочей копии можно обосновать. Если фраза произнесена дважды, сохраните оба появления и при необходимости поясните повтор.
Для сравнения исправленной копии с исходником используйте отчёт правок difflib. Получить текстовую основу записи можно через Транскрибатор. Автоматический список не заменяет прослушивание спорных мест.
После правок номера строк сместятся. Не применяйте старый отчёт к новой версии; запускайте проверку снова. Пустой отчёт означает только отсутствие точных соседних совпадений. Далёкие повторы, изменённые метки и смысловое повторение остаются за пределами алгоритма.
Учебный пример: одинаковая строка и повтор смысла
Вымышленные фрагменты показывают границы точного сравнения.
| Соседние строки | Результат | Проверка |
|---|---|---|
| Да / Да | Кандидат | Произнесено один или два раза? |
| Да / Да. | Не отмечено | Пунктуация отличается |
| [00:10] Да / [00:11] Да | Не отмечено | Метки различаются |
Не удаляйте все строки отчёта массово: технический дубль должен быть подтверждён источником.
Карточка проверки повтора
Версия TXT: [имя] Строки: [первая / вторая] Точный фрагмент: [текст] Таймкод проверки: [время] Граница склейки: [есть / нет] По аудио: [повтор / один раз / неясно] Решение: [оставить / убрать дубль] Основание и новая версия: [запись]
Частые вопросы
Можно сразу удалить вторую строку?
Нет. Повтор может быть частью реальной речи. Сверьте запись.
Почему похожая фраза не найдена?
Алгоритм проверяет точное равенство соседних строк, включая метки и пунктуацию.
Три одинаковые строки дадут три совпадения?
Они дадут две перекрывающиеся пары. Рассматривайте весь участок.
Пустой отчёт гарантирует отсутствие дублей?
Нет. Другие виды повторов этот способ не проверяет.