diff --git a/sumy/summarizers/lex_rank.py b/sumy/summarizers/lex_rank.py index c6d230a..85f0bf2 100644 --- a/sumy/summarizers/lex_rank.py +++ b/sumy/summarizers/lex_rank.py @@ -164,6 +164,7 @@ def power_method(matrix, epsilon): while lambda_val > epsilon: next_p = numpy.dot(transposed_matrix, p_vector) + next_p /= numpy.linalg.norm(next_p) lambda_val = numpy.linalg.norm(numpy.subtract(next_p, p_vector)) p_vector = next_p diff --git a/tests/test_summarizers/test_lex_rank.py b/tests/test_summarizers/test_lex_rank.py index 85f9999..1e9c057 100644 --- a/tests/test_summarizers/test_lex_rank.py +++ b/tests/test_summarizers/test_lex_rank.py @@ -169,3 +169,16 @@ def test_power_method_should_return_different_scores_for_sentences(): scores = LexRankSummarizer.power_method(matrix, LexRankSummarizer.epsilon) assert len(frozenset(scores.tolist())) > 1 + +def test_power_method_should_return_finite(): + """See https://github.com/miso-belica/sumy/issues/187""" + matrix = numpy.array([ + [0.1, 0.2, 0.3, 0.6, 0.9], + [0.45, 0, 0.3, 0.6, 0], + [0.5, 0.6, 0.3, 1, 0.9], + [0.7, 0, 0, 0.6, 0], + [0.5, 0.123, 0, 0.111, 0.9], + ]) + scores = LexRankSummarizer.power_method(matrix, LexRankSummarizer.epsilon) + + assert all(numpy.isfinite(scores)) \ No newline at end of file