Латиница внутри русских слов расшифровки: как найти смешанные буквы через Python
Проверка латинских букв внутри русского слова без автоматической замены. CSV-отчёт с номером строки, позицией символа и контекстом для редактора.
Почему похожее слово не находится
Латинская o и кириллическая о выглядят похоже, но имеют разные кодовые точки. В учебном слове мoдель второй символ — латинский. Поиск по полностью кириллическому модель может не найти его. Такое смешение бывает после копирования текста или ручного исправления; по одному признаку нельзя установить причину.
Проверьте, что проблема действительно в алфавите. Нормализация NFC решает другую задачу — разные представления составного символа. Она не превращает латинскую o в русскую о. Не запускайте нормализацию как универсальное исправление всех похожих букв.
Отделите подозрительные слова от правильной латиницы
Строка «Обсудили Python и новую мoдель» содержит правильное название Python и кандидата мoдель. Отдельное латинское слово само по себе не ошибка. Смешанный токен тоже может быть намеренным: техническая маркировка, формула или буквенный код требует проверки.
В примере применяется ограниченная эвристика: токены из A–Z, a–z, А–Я, а–я и Ёё. Она отмечает одновременно два набора внутри одного токена. Это не полная реализация стандарта Unicode для определения письменности и не проверка безопасности адресов. Буквы других языков, цифры и дефисы требуют отдельной схемы.
Создайте отчёт, оставив исходник неизменным
Сохраните transcript.txt в UTF-8. Положите рядом mixed_letters.py и выполните python mixed_letters.py. Новый mixed-script-report.csv создаётся в режиме x, поэтому прежний отчёт не перезаписывается. Если он уже существует, выберите другое имя результата и укажите проверяемую версию.
Номер строки начинается с единицы. latin_positions — позиции латинских букв внутри найденного слова, также с единицы. context содержит первые 200 символов строки; полный контекст проверяйте в исходном TXT. В длинной строке слово может оказаться за границей этого фрагмента, но его текст и номер сохраняются.
import re, csv
from pathlib import Path
text = Path("transcript.txt").read_text(encoding="utf-8-sig")
with Path("mixed-script-report.csv").open("x", encoding="utf-8-sig", newline="") as target:
writer = csv.writer(target)
writer.writerow(["line", "word", "latin_positions", "context"])
for line_no, line in enumerate(text.splitlines(), 1):
for match in re.finditer(r"[A-Za-zА-Яа-яЁё]+", line):
word = match.group()
if re.search(r"[A-Za-z]", word) and re.search(r"[А-Яа-яЁё]", word):
positions = " ".join(str(i+1) for i,c in enumerate(word) if c.isascii() and c.isalpha())
writer.writerow([line_no, word, positions, line[:200]])
print("Список кандидатов сохранён; исходный TXT не изменён")
Исправляйте только подтверждённые места
Откройте отчёт и сверяйте кандидаты с терминологией, записью и ближайшими репликами. В мoдель замена o на о может быть обоснованна; в названии продукта похожая последовательность способна быть точной. Сохраните журнал «было — стало — основание». Не стирайте различия автоматически ради одинаковой частоты слов.
После исправлений найдите термин обычным поиском и повторите диагностический скрипт на новой копии. Если требуется сравнение версий, используйте HTML-отчёт правок. Подготовить исходную текстовую основу можно через Транскрибатор, а точные названия всё равно нужно проверять.
Отсутствие кандидатов не доказывает отсутствие ошибок: полностью латинское слово с похожими буквами этот фильтр не отметит. Проверяйте критичные имена отдельно. CSV с репликами может содержать конфиденциальный материал; локальный отчёт сохраняет тот же контекст и требует тех же правил доступа.
Учебный пример: слово, название и обозначение
В примерах символ o в мoдель латинский; остальные оценки требуют знания контекста.
| Фрагмент | Диагностика | Действие |
|---|---|---|
| мoдель | Смешанный токен | Проверить вторую букву |
| Python | Только латиница | Не менять автоматически |
| AБ | Смешанный токен | Проверить обозначение |
Все фрагменты учебные. Не считайте наличие смешанной буквы доказательством намеренной подмены или ошибки конкретного человека.
Журнал проверки смешанных символов
Версия TXT: [имя] Строка: [номер] Токен: [точный текст] Позиция латинской буквы: [число] Контекст и термин: [проверка] Решение: [оставить / исправить] Основание: [запись / словарь] Поиск после правки: [результат]
Частые вопросы
Почему NFC не помогла?
Латинская и кириллическая буквы не становятся одной буквой при нормализации NFC.
Нужно заменить все английские буквы?
Нет. Правильные названия и обозначения должны сохраниться.
Отчёт находит все алфавиты Unicode?
Нет. В примере используется ограниченный набор русских и базовых латинских букв.
Можно исправить всё одной командой?
Для расшифровки безопаснее проверить кандидаты по контексту и сохранить журнал решений.