Skip to main content

provides a common interface to many IR measure tools

Project description

Python package

ir_measures

from ir_measures import AP, P, nDCG, ERR, Bpref, RR, RBP
measure = AP
measure.iter_calc(qrels, run)
# returns an iterator over each query
measure.calc_aggregate(qrels, run)
# returns the aggregated (for AP, averaged) result over all queries

# supports arguments:
measure = AP(rel=2) # minimum relevance
measure = AP(cutoff=100) # measure cutoff
measure = AP@100 # same as above: @ means cutoff
measure = AP(rel=2)@100 # mix & match

measure = P
measure.iter_calc(qrels, run) # validation: throws error because needs cutoff
measure = P@5
measure.iter_calc(qrels, run) # works

from ir_measures import iter_calc, calc_aggregate
iter_calc([AP, AP(rel=2), nDCG, nDCG@10, P@5], qrels, run) # calculate multiple measures at once
iter_calc([P@[1,5,10]], qrels, run) # expands to multiple cutoffs

# The above use a global priority list of measure providers. You
# can also choose a specific one to use.
from ir_measures import PyTrecEval, GdEval
PyTrecEval.iter_calc([nDCG@20], qrels, run)
GdEval.iter_calc([nDCG@20], qrels, run)
# Throws error if not supported on system (e.g., perl not available for GdEval)
# of if meausre not supported by provider

Qrels can be provided in the following formats:

# dict of dict
qrels = {
    'Q0': {
        "D0": 1,
        "D1": 0,
    },
    "Q1": {
        "D0": 0,
        "D3": 2
    }
}

# dataframe
qrels = pd.DataFrame([
    {'query_id': "Q0", 'doc_id': "D0", 'relevance': 1},
    {'query_id': "Q0", 'doc_id': "D1", 'relevance': 0},
    {'query_id': "Q1", 'doc_id': "D0", 'relevance': 0},
    {'query_id': "Q1", 'doc_id': "D3", 'relevance': 2},
])

# any iterable of namedtuples (e.g., list, generator, etc)
from ir_measurs.util import GenericQrel
qrels = [
    GenericQrel("Q0", "D0", 1),
    GenericQrel("Q0", "D1", 0),
    GenericQrel("Q1", "D0", 0),
    GenericQrel("Q1", "D3", 2),
]

Runs can be provided in the following formats:

# dict of dict
run = {
    'Q0': {
        "D0": 1.2,
        "D1": 1.0,
    },
    "Q1": {
        "D0": 2.4,
        "D3": 3.6
    }
}

# dataframe
run = pd.DataFrame([
    {'query_id': "Q0", 'doc_id': "D0", 'score': 1.2},
    {'query_id': "Q0", 'doc_id': "D1", 'score': 1.0},
    {'query_id': "Q1", 'doc_id': "D0", 'score': 2.4},
    {'query_id': "Q1", 'doc_id': "D3", 'score': 3.6},
])

# any iterable of namedtuples (e.g., list, generator, etc)
from ir_measurs.util import GenericScoredDoc
run = [
    GenericScoredDoc("Q0", "D0", 1.2),
    GenericScoredDoc("Q0", "D1", 1.0),
    GenericScoredDoc("Q1", "D0", 2.4),
    GenericScoredDoc("Q1", "D3", 3.6),
]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ir_measures-0.1.0.tar.gz (22.7 kB view details)

Uploaded Source

File details

Details for the file ir_measures-0.1.0.tar.gz.

File metadata

  • Download URL: ir_measures-0.1.0.tar.gz
  • Upload date:
  • Size: 22.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ir_measures-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f1540cc8defc04470355255d4f0924b0226cb5a73f7eea9ef41c6a262694e9e9
MD5 86bdf61c649d9b280abb86db1907d32e
BLAKE2b-256 6bb9387b94be0e47ff5ecb3f85714d0c8cd81f5c85a1343a17b6afbe568b9b02

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page