Skip to content

Latest commit

 

History

History
65 lines (48 loc) · 1.59 KB

similarity.rst

File metadata and controls

65 lines (48 loc) · 1.59 KB

Similarity

The similarity submodule allows to create custom Similarity calculations for comparison of single terms or term-sets.

It provides a simple interface to register custom Similarity handler, so that they can be called directly on an :class:`pyhpo.term.HPOTerm` or an :class:`pyhpo.set.HPOSet`.

SimilarityBase

.. autoclass:: pyhpo.similarity.base.SimilarityBase

__call__

.. automethod:: pyhpo.similarity.base.SimilarityBase.__call__


Examples

from pyhpo.similarity.base import SimScore, SimilarityBase
from pyhpo import Ontology

class CustomSimscore(SimilarityBase):
    # For demo purposes, we will just check for equality

    def __call__(
        self,
        term1: 'pyhpo.HPOTerm',
        term2: 'pyhpo.HPOTerm',
        kind: str,
        dependencies: List[float]
    ) -> float:
        if term1 == term2:
            return 1
        else:
            return 0

SimScore.register('custom_method', CustomSimscore)

_ = Ontology()

term1 = Ontology.get_hpo_object('Scoliosis')
term2 = Ontology.get_hpo_object('Thoracic scoliosis')

sim_score = term1.similarity_score(
    other=term2,
    kind='omim',  # actually doesn't matter in this example
    method='custom_method'
)

assert sim_score == 0

# Now comparing the same term to each other
sim_score = term1.similarity_score(
    other=term1,
    kind='omim',  # actually doesn't matter in this example
    method='custom_method'
)

assert sim_score == 1