dana-medical-site/migrations/import/find_bio_glitches.py
2026-10-14 13:33:13 +00:00

35 lines
2.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""Ищет подозрительные записи в doctor_bio_entries: обрывки ФИО, мусор,
слишком короткие/бессмысленные строки, попавшие туда из исходника Bitrix."""
import csv, io, re
NAME_RE = re.compile(r'^[А-ЯЁ][а-яё]+(?:-[А-ЯЁ][а-яё]+)?\s+[А-ЯЁ][а-яё]+\s+[А-ЯЁ][а-яё]+\.?$')
NAME_RE_SHORT = re.compile(r'^[А-ЯЁ][а-яё]+\s+[А-ЯЁ]\.\s?[А-ЯЁ]\.$')
HAS_DIGIT = re.compile(r'\d')
EDU_KEYWORDS = re.compile(
r'(?i)(оконч|университет|академи|институт|ординатур|интернатур|специальност|'
r'сертификат|курс|повышени|переподготовк|обучени|стажировк|конгресс|конференц|'
r'семинар|мастер-класс|диплом|premij|награжд|лауреат|грамот|благодарност|'
r'участ|доклад|школ|цикл|факультет)')
rows = list(csv.reader(io.open('bio_entries.csv', encoding='utf-8')))
suspicious = []
for doc_id, doc_name, entry_id, kind, year, title in rows:
t = title.strip()
flags = []
if NAME_RE.match(t) or NAME_RE_SHORT.match(t):
flags.append('похоже на голое ФИО')
if len(t) < 15 and not HAS_DIGIT.search(t):
flags.append('слишком короткая, без года/деталей')
if not EDU_KEYWORDS.search(t) and not HAS_DIGIT.search(t):
flags.append('нет ни года, ни ключевых слов образования/наград')
if flags:
suspicious.append((doc_name, kind, year, t, flags))
out = io.open('bio_glitches_report.txt', 'w', encoding='utf-8')
out.write('Всего записей: %d\nПодозрительных: %d\n\n' % (len(rows), len(suspicious)))
for doc_name, kind, year, t, flags in suspicious:
out.write('%-30s [%s] год=%-5s %s\n -> %s\n\n' % (doc_name, kind, year or '-', t, ', '.join(flags)))
out.close()
print('suspicious:', len(suspicious), 'of', len(rows))