File size: 1,459 Bytes
0f34acb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"""

Модуль итеративного отбора предложений с подавлением семантической избыточности

"""
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)