fix: подбор угроз программой + сравнение программа↔ИИ
Проблемы: 1. Подбор программой возвращал 193 из 227 угроз (весь перечень) — теперь скоринг по ключевым словам объекта (тип, интернет, нарушитель, сеть), отсев нерелевантных: 72-82 угрозы вместо 193 2. Сравнение программа↔ИИ не подсвечивало совпадения: ИИ возвращает «1. УБИ.001 …» / с лишними пробелами — сравнение шло по точной строке. Теперь ключ сравнения — код УБИ (regex), иначе нормализованный текст; добавлена статистика «Совпало / только программа / только ИИ»
This commit is contained in:
+24
-2
@@ -173,12 +173,34 @@ def suggest_threats_program(isys, threats=None, limit=None):
|
||||
# — оставляем всё, кроме специфики каналов связи, если их нет
|
||||
pass
|
||||
|
||||
result = []
|
||||
# --- Положительные ключевые слова: чем больше совпало — тем угроза актуальнее ---
|
||||
pos = list(BASE_KEYWORDS)
|
||||
if has_internet:
|
||||
pos += INTERNET_KEYWORDS
|
||||
else:
|
||||
pos += ISOLATED_KEYWORDS
|
||||
if is_asu:
|
||||
pos += ASU_KEYWORDS
|
||||
if is_network:
|
||||
pos += NETWORK_KEYWORDS
|
||||
if _is_insider(isys):
|
||||
pos += INSIDER_KEYWORDS
|
||||
else:
|
||||
pos += EXTERNAL_KEYWORDS
|
||||
# Убираем дубликаты
|
||||
pos = list(dict.fromkeys(pos))
|
||||
|
||||
scored = []
|
||||
for t in threats:
|
||||
tl = str(t).lower()
|
||||
if any(kw in tl for kw in exclude):
|
||||
continue
|
||||
result.append(t)
|
||||
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]
|
||||
|
||||
if limit and len(result) > limit:
|
||||
result = result[:limit]
|
||||
|
||||
Reference in New Issue
Block a user