""" Модуль итеративного отбора предложений с подавлением семантической избыточности """ import numpy as np def iterative_selection(scores: np.ndarray, similarity_matrix: np.ndarray, k: int, theta: float = 0.6) -> list: """ Итеративный жадный отбор с подавлением семантически близких предложений. Args: scores: начальные оценки Score(S_i) similarity_matrix: матрица попарного семантического сходства k: целевое количество предложений theta: коэффициент подавления (0-1) Returns: индексы отобранных предложений в хронологическом порядке """ N = len(scores) selected = [] remaining = list(range(N)) current_scores = scores.copy() for _ in range(min(k, N)): best_idx = max(remaining, key=lambda i: current_scores[i]) selected.append(best_idx) remaining.remove(best_idx) for i in remaining: sim = similarity_matrix[best_idx, i] current_scores[i] = current_scores[i] * (1 - theta * sim) current_scores[i] = max(current_scores[i], 0.0) return sorted(selected)