Угрозы: список сортируется по возрастанию кода УБИ (УБИ.001 → УБИ.211) во всех местах — подбор программой, ИИ, автозаполнение, импорт, добавление недостающих
This commit is contained in:
+21
-3
@@ -11,6 +11,24 @@
|
||||
|
||||
import os
|
||||
import json
|
||||
import re
|
||||
|
||||
|
||||
def _ubi_num(text):
|
||||
"""Код УБИ из строки → int: «УБИ.069 Название» → 69. None, если кода нет."""
|
||||
m = re.search(r'уби\.?\s*(\d+)', str(text), re.IGNORECASE)
|
||||
return int(m.group(1)) if m else None
|
||||
|
||||
|
||||
def sort_threats_by_ubi(items):
|
||||
"""Сортировка угроз по возрастанию кода УБИ (УБИ.001, УБИ.002, …).
|
||||
|
||||
Строки без кода УБИ уходят в конец (по алфавиту).
|
||||
"""
|
||||
def _key(t):
|
||||
n = _ubi_num(t)
|
||||
return (0, n) if n is not None else (1, str(t).lower())
|
||||
return sorted(items, key=_key)
|
||||
|
||||
|
||||
def load_threats(dict_dir=None):
|
||||
@@ -244,9 +262,9 @@ def suggest_threats_program(isys, threats=None, limit=None):
|
||||
sc = sum(1 for kw in pos if kw in tl)
|
||||
scored.append((sc, t))
|
||||
|
||||
# Сортируем по релевантности (сначала — с наибольшим совпадением)
|
||||
scored.sort(key=lambda x: -x[0])
|
||||
result = [t for sc, t in scored if sc > 0]
|
||||
# Сортируем по возрастанию кода УБИ (УБИ.001 → УБИ.211…)
|
||||
scored = [t for sc, t in scored if sc > 0]
|
||||
result = sort_threats_by_ubi(scored)
|
||||
|
||||
if limit and len(result) > limit:
|
||||
result = result[:limit]
|
||||
|
||||
Reference in New Issue
Block a user