Skip to content

semsimian

Details

GitHub monarch-initiative/semsimian
Language Jupyter Notebook
Description Simple rust implementation of semantic similarity

Documentation

semsimian

Semsimian is a package to provide fast semantic similarity calculations for ontologies. It is a Rust library with a Python interface.

This includes implementation of Jaccard and Resnik similarity of terms in an ontology, as well as a method to calculate the similarity of two sets of terms (so-called termset similarity). Other methods will be added in the future.

Semsimian is currently integrated into OAK and the Monarch app to provide fast semantic similarity calculations.

Installation

  • Set up your virtual environment of choice.
  • cd semsimian (home directory of this project)
  • pip install maturin
  • maturin develop
  • python
    Python 3.9.16 (main, Jan 11 2023, 10:02:19) 
    [Clang 14.0.6 ] :: Anaconda, Inc. on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from semsimian import Semsimian
    >>> s = Semsimian([('banana', 'is_a', 'fruit'), ('cherry', 'is_a', 'fruit')])
    >>> s.jaccard_similarity('banana', 'cherry')
    
    This should yield a value of 1.0.

Releases

As of version 0.2.11, the semsimian source is released on GitHub, with a corresponding set of Python wheels released to PyPi and a corresponding release in crates.io.

To trigger a new set of builds, first update the version number in Cargo.toml, then create a new release.

Wheels are prepared for the following environments and architectures:

OS Architectures Python Versions
Linux x86_64, x86_64-unknown-linux-musl, aarch64-unknown-linux-gnu, aarch64-unknown-linux-musl 3.8, 3.9, 3.10, 3.11, 3.12
MacOS x86_64, universal2 3.8, 3.9, 3.10, 3.11, 3.12
Windows x86_64 3.8, 3.9, 3.10, 3.11, 3.12

Troubleshooting

Building for Mac ARM M1 architectures

If a import semsimian results in a ImportError warning about incompatible architecture, try the following: - Install conda. This guide may be helpful. - Set up a virtual environment with conda so that your Python build is aligned with your processor architecture (in this case, ARM). Try something like:

$ conda create -n myenv python=3.9
...setup happens...
$ conda activate myenv
and then proceed as above.

Code Coverage via Docker

Build a docker image:

docker build -t my-rust-app .

Run your tests inside a Docker container and generate coverage:

docker run -v "$(pwd)":/usr/src/app -t my-rust-app bash -c "CARGO_INCREMENTAL=0 RUSTFLAGS='-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort' cargo test && grcov . -s . --binary-path ./target/debug/ -t html --branch --ignore-not-existing -o ./target/debug/coverage/"

Get Coverage report from:

open ./target/debug/coverage/index.html