feat: переделка под ОКИИ (187-ФЗ) — объекты КИИ вместо ИС, категории 1-3, ОКВЭД, убраны ПДн/бумажные носители
- вкладка «Информационные системы» → «Объекты КИИ», убрана «Структура объекта» - «Тип угроз»/«УЗ» → категория значимости 1/2/3/без категории - удалены Категории ПДн, кол-во записей, перечень/субъекты/действия с ПДн + словари - «Пользователи ИС» → «Пользователи ОКИИ», средства защиты оставлены - вкладка «Бумажные документы» удалена полностью (GUI + логика + модели) - ОКВЭД: поля во вкладке «Организация», словарь okved.json, выбор галочками, импорт - нормализация регистра адреса DaData (КАПС → нормальный) - importer: объекты КИИ (наименование объекта, ПО, СЗИ, пользователи)
This commit is contained in:
+32
-2
@@ -65,6 +65,17 @@ _ADDRESS_ABBR = {
|
||||
'СТ': 'ст.', 'Ш': 'ш.', 'Р-Н': 'р-н.', 'Б-Р': 'б-р.', 'МКР': 'мкр.',
|
||||
'НАБ': 'наб.', 'ТУП': 'туп.', 'ПР-Д': 'пр-д.', 'КРП': 'крп.',
|
||||
'Г.': 'г.', 'УЛ.': 'ул.', 'Д.': 'д.', 'Р-Н.': 'р-н.',
|
||||
'Г.О': 'г.о.', 'Г.О.': 'г.о.', 'ГО': 'г.о.', 'М.О': 'м.о.', 'М.О.': 'м.о.',
|
||||
}
|
||||
|
||||
# Слова, которые в адресах пишутся со строчной буквы (кроме случаев,
|
||||
# когда стоят первым словом после точки — «г. Электроугли» и т.п.)
|
||||
_ADDRESS_LOWERCASE = {
|
||||
'область', 'край', 'республика', 'округ', 'район', 'город', 'поселок',
|
||||
'посёлок', 'деревня', 'село', 'станица', 'хутор', 'аул', 'улица',
|
||||
'проспект', 'переулок', 'бульвар', 'шоссе', 'набережная', 'площадь',
|
||||
'проезд', 'тупик', 'аллея', 'линия', 'дом', 'строение', 'корпус',
|
||||
'квартира', 'офис', 'помещение', 'этаж', 'комната', 'участок',
|
||||
}
|
||||
|
||||
|
||||
@@ -105,7 +116,12 @@ def _normalize_text(text):
|
||||
|
||||
|
||||
def normalize_address(text):
|
||||
"""«Г Крымск» → «г. Крымск», «Р-Н» → «р-н.» и т.п."""
|
||||
"""«Г Крымск» → «г. Крымск», «Р-Н» → «р-н.», «МОСКОВСКАЯ ОБЛАСТЬ» → «Московская область».
|
||||
|
||||
Приводит адрес к нормальному регистру: каждое слово с заглавной буквы,
|
||||
адресные сокращения (г., ул., д., обл., г.о.) и административные термины
|
||||
(область, район, город, дом и т.п.) — со строчной.
|
||||
"""
|
||||
if not text:
|
||||
return ''
|
||||
parts = re.split(r'(\s+|[,\;])', text)
|
||||
@@ -115,7 +131,21 @@ def normalize_address(text):
|
||||
out.append(_ADDRESS_ABBR[p.strip().upper()])
|
||||
else:
|
||||
out.append(p)
|
||||
return ''.join(out)
|
||||
res = ''.join(out)
|
||||
# КАПС → нормальный регистр по словам
|
||||
res = _normalize_text(res)
|
||||
# Адресные термины — со строчной буквы (сохраняя пунктуацию)
|
||||
words = res.split(' ')
|
||||
fixed = []
|
||||
for w in words:
|
||||
m = re.match(r'^([^\w]*)([\w\-]+)([^\w]*)$', w, re.UNICODE)
|
||||
if m:
|
||||
pre, core, post = m.group(1), m.group(2), m.group(3)
|
||||
if core.lower() in _ADDRESS_LOWERCASE:
|
||||
fixed.append(pre + core.lower() + post)
|
||||
continue
|
||||
fixed.append(w)
|
||||
return ' '.join(fixed)
|
||||
|
||||
|
||||
def _fmt_date(value):
|
||||
|
||||
Reference in New Issue
Block a user