Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyNTCIREVAL/metrics/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
from .ms_ndcg import MSnDCG
from .precision import Precision
from .hit import Hit
from .recall import Recall

18 changes: 18 additions & 0 deletions pyNTCIREVAL/metrics/recall.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from .metric import Metric

class Recall(Metric):
'''
Recall

Args:
xrelnum: the number of judged X-rel docs (including 0-rel=judged nonrel).
labeled_ranked_list: a list of tuples, where each tuple contains a document ID and its corresponding relevance score.
'''
def __init__(self, xrelnum):
self.total_positives = sum(xrelnum[1:])

def compute(self, labeled_ranked_list):
true_positives = sum(grade for docid, grade in labeled_ranked_list if grade is not None and grade > 0)
if true_positives == 0:
return 0.0
return true_positives / self.total_positives
22 changes: 22 additions & 0 deletions tests/test_recall.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding:utf-8 -*-
import pytest

class TestRecall(object):

def test_precision(self):
from pyNTCIREVAL import Labeler
from pyNTCIREVAL.metrics import Recall

qrels = {0: 1, 1: 0, 2: 0, 3: 0, 4: 1, 5: 0, 6: 0, 7: 1, 8: 0, 9: 0}
ranked_list = [0, 1, 3, 5, 8, 9] # a list of document IDs

# labeling: [doc_id] -> [(doc_id, rel_level)]
labeler = Labeler(qrels)
labeled_ranked_list = labeler.label(ranked_list)

xrelnum = labeler.compute_per_level_doc_num(2)
metric = Recall(xrelnum)
assert xrelnum == [7, 3]

result = metric.compute(labeled_ranked_list)
assert result == 0.3333333333333333