semsimian_server 0.2.2

A server for SemSimian, a semantic similarity service for biomedical ontologies
Documentation
# Semsimian Server

A simple web server for the Semsimian project, written in Rust.

### Requirements:

- [Rust]https://www.rust-lang.org/tools/install

  - rustup >= 1.28
  - rustc >= 1.87
  - cargo >= 1.87

### Installation:

0. Semsimian Server requires a local copy of the Phenio DB.  
   Download a copy of `phenio.db.gz` from https://data.monarchinitiative.org and unpack it into `$HOME/.data/oaklib`:

   ```bash
   mkdir -p ~/.data/oaklib
   cd ~/.data/oaklib
   wget https://data.monarchinitiative.org/monarch-kg/latest/phenio.db.gz
   gunzip phenio
   ```

1. Clone the repository:
   ```bash
   git clone https://github.com/monarch-initiative/semsimian-server
   ```
2. Build the project:
   ```bash
   cd semsimian-server
   cargo build
   ```
3. Run the server:
   ```bash
   cargo run
   ```

### Usage:

In debug mode (ie. `cargo build`), the server will be running on `http://localhost:18811`.  
The address and port can be configured in the `Rocket.toml` file, or by setting the `ROCKET_ADDRESS` and `ROCKET_PORT` environment variables.

The server exposes two endpoints:

- `/compare/<termset1>/<termset2>/<metric>`:  
  Returns a JSON object containing the similarity score between the two termsets.

  - `termset1` and `termset2`: comma-separated lists of ontology terms.
  - `metric`: the similarity method to use, one of:  
    `ancestor_information_content`, `jaccard_similarity`, `phenodigm_score`, `cosine_similarity`

- `/search/<termset>/<prefix>/<metric>?<limit>&<direction>`:  
  Returns a JSON object containing a list of ontology terms that match the search term and prefix.

  - `termset`: comma-separated list of ontology terms.
  - `prefix`: string that will be used to filter the results.
  - `metric`: the similarity method to use, one of:  
    `ancestor_information_content`, `jaccard_similarity`, `phenodigm_score`, `cosine_similarity`
  - `limit`: number, limit the number of results
  - `direction`: the direction of the associations to search for, one of:  
    `bidirectional`, `subject_to_object`, `object_to_subject`

Examples:
`http://localhost:18811/compare/HP:0000001,HP:0000002/HP:0000003,HP:0000004/ancestor_information_content`
`http://localhost:18811/search/HP:0000001,HP:0000002/zfin/ancestor_information_content`

\***\*Docker Image\*\***

A Dockerfile is provided for convenience. While it is hosted on [Google Cloud Platform](us-central1-docker.pkg.dev/monarch-initiative/monarch-api/semsimian-server:latest),  
it can be built locally.

To build the image, run the following command from the root of the repository:

```bash
docker build -t semsimian-server .
```

To run the image, run the following command:

```bash
docker run -p 9999:9999 semsimian-server
```