# Ddi Corpus

> DDI Corpus 2013 – Drug-Drug Interaction Query Skill

- Skill: `gabrielmoreira/ddi-corpus` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add gabrielmoreira/ddi-corpus`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gabrielmoreira/ddi-corpus/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: gabrielmoreira (https://skillmd.com/u/gabrielmoreira)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/gabrielmoreira/ddi-corpus

---

# DDI Corpus 2013 – Drug-Drug Interaction Query Skill

## Overview

| Field | Value |
|-------|-------|
| **Resource** | DDI Corpus 2013 |
| **Category** | Drug-centric / Drug NLP & Text Mining |
| **Source** | [GitHub](https://github.com/isegura/DDICorpus) |
| **Paper** | [Herrero-Zazo et al., 2013](https://www.sciencedirect.com/science/article/pii/S1532046413001123) |
| **Corpus Size** | ~2,740 unique entities, ~5,000 annotated DDI pairs |
| **Sources** | DrugBank descriptions + MEDLINE abstracts |

The DDI Corpus 2013 is the standard benchmark for drug-drug interaction (DDI) extraction from biomedical text. Each XML file contains sentences with annotated drug entities and pairwise DDI labels.

**DDI Types:**
- `mechanism` – pharmacokinetic mechanism described (e.g., altered absorption/metabolism)
- `effect` – clinical effect of the interaction (e.g., increased bleeding risk)
- `advise` – recommendation or warning about co-administration
- `int` – stated interaction without further detail

**Entity Types:** `drug`, `group`, `brand`, `drug_n` (active substance not approved for human use)

## Setup

**1. Download & extract** (one-time):

```bash
git clone https://github.com/isegura/DDICorpus.git
cd DDICorpus
unzip DDICorpus-2013.zip
```

**2. Set the corpus path** in `30_DDI_Corpus_2013.py`:

```python
CORPUS_ROOT = "/path/to/DDICorpus-master"  # contains DDICorpus/Train/ and DDICorpus/Test/
```

Or pass `--root` at runtime or set env var `DDI_CORPUS_ROOT`.

## Usage

### Python API

```python
from 30_DDI_Corpus_2013 import query_entities, list_all_entities, corpus_stats

# Query a single drug
result = query_entities("aspirin")

# Query multiple drugs at once
result = query_entities(["warfarin", "metformin", "digoxin"])

# List all entity names in the corpus
names = list_all_entities()

# Get corpus-level statistics
stats = corpus_stats()
```

### CLI (直接运行)

```bash
python 30_DDI_Corpus_2013.py
```

直接运行即输出 demo 结果（corpus 统计 → 单实体查询 → 批量查询 → 未找到示例）。
修改 `__main__` 块中的实体名即可自定义查询。

## Output Format

`query_entities` returns a JSON string. Each element:

```json
{
  "query": "aspirin",
  "found": true,
  "canonical_names": ["ASPIRIN", "Aspirin", "aspirin"],
  "entity_types": ["brand", "drug"],
  "total_interactions": 65,
  "interactions": [
    {
      "partner": "ketoprofen",
      "ddi_type": "mechanism",
      "sentence": "concurrent administration of aspirin decreased ketoprofen protein binding...",
      "source": "Train/DrugBank"
    }
  ],
  "example_sentences": ["..."]
}
```

If an entity is not found: `{"query": "xyz", "found": false}`.

## Parameters

| Parameter | Default | Description |
|-----------|---------|-------------|
| `entities` | *(required)* | `str` or `list[str]` — drug names to look up (case-insensitive) |
| `corpus_root` | `CORPUS_ROOT` | Path to the extracted DDICorpus-master directory |
| `max_interactions` | `20` | Maximum interaction records returned per entity |
| `max_sentences` | `5` | Maximum example sentences returned per entity |

## Dependencies

Python 3.10+ standard library only (`xml.etree.ElementTree`, `json`, `os`, `collections`). No third-party packages required.

