Zet klinische tekst om in gestructureerd, ge-de-identificeerd inzicht op hardware die je beheert.
De lokale kernruntime van OpenMed voert extractie en de-identificatie uit nadat de vereiste modelartefacten beschikbaar zijn. Modeldownloads, adapters voor externe providers, paden met telemetrie en door de gebruiker ingestelde integraties kunnen het netwerk gebruiken; controleer de voorwaarden van elk model en elke dataset.
PyPI package · Python 3.10+ · Model catalog · Research paper · Apache-2.0 SDK source
OpenMedKit · Apple Silicon / MLX · Android / ONNX Runtime Mobile · Browser / Transformers.js · Documentation
Lokale uitvoering voorop · 33 modelondersteunde PII-talen · Apache-2.0 SDK
English · 简体中文 · Español · Français · Deutsch · Italiano · Português · Nederlands · العربية · हिन्दी · తెలుగు · 日本語 · Türkçe · فارسی
PII-de-identificatie in realtime: de Nemotron Privacy Filter maskeert namen, adressen, ID's en factuurgegevens uit een klinisch ontslagbericht, volledig op het apparaat. (Alle getoonde waarden zijn synthetisch.)
from openmed import analyze_text
result = analyze_text(
"Patient started on imatinib for chronic myeloid leukemia.",
model_name="disease_detection_superclinical",
)
for entity in result.entities:
print(f"{entity.label:<12} {entity.text:<28} {entity.confidence:.2f}")
# DISEASE chronic myeloid leukemia 0.98
# DRUG imatinib 0.95Een klinisch NER-model gebruikt de lokale runtime nadat de vereiste artefacten beschikbaar zijn.
| Implementatieaspect | Grens van de OpenMed SDK |
|---|---|
| Kernruntime | Verwerkt lokaal nadat de vereiste artefacten beschikbaar zijn |
| Optionele netwerkpaden | Downloads, externe adapters, telemetriepaden en integraties kunnen het netwerk gebruiken |
| Validatie | De beheerder valideert model- en datavoorwaarden, privacygedrag en klinische geschiktheid |
| Interfaces | Python, Swift, Android, browser en diensten waar ondersteund |
- Samengestelde modelcatalogus: valideer elk model, elke licentie en dataset voor je gebruikssituatie.
- Op Safe Harbor afgestemde configuratie: kan de 18 identificatorcategorieën adresseren; deskundige implementatiebeoordeling blijft vereist en gebruik van de SDK toont op zichzelf geen HIPAA-naleving aan.
- Ondersteunde uitvoerpaden: CPU-, CUDA-, MLX-, mobiele, service- en browseradapters verschillen per omgeving en artefact.
- Implementatie-interfaces: Python, containers, services en batchworkflows vereisen configuratie en validatie.
- SDK-broncode: uitgebracht onder Apache-2.0 License; voorwaarden van modellen en datasets verschillen.
Op ondersteunde Apple-hardware kan OpenMed MLX en OpenMedKit gebruiken voor lokale verwerking nadat de vereiste artefacten beschikbaar zijn. Modelverwerving en door de gebruiker ingestelde externe integraties blijven afzonderlijke netwerkgrenzen.
// Add OpenMedKit to your app
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "2.0.0"),
]- MLX-runtime voor PII-tokenclassificatie, de Privacy Filter-familie en experimentele zero-shot-taken van de GLiNER-familie, met een CoreML-fallbackpad.
- Eén modelnaam, elk platform: op niet-Apple-hardware vallen MLX-modelnamen automatisch terug op het bijbehorende PyTorch-checkpoint.
- Python op Apple Silicon ook:
pip install --upgrade "openmed[mlx]".
Handleidingen: MLX-backend · OpenMedKit (Swift) · CoreML-export
flowchart LR
A["Klinische tekst"] --> B["OpenMed<br/>(lokaal eerst)"]
B --> C["Medische entiteiten"]
B --> D["PII gedetecteerd"]
B --> E["Ge-de-identificeerde tekst"]
style B fill:#0D6E6E,stroke:#0A5656,stroke-width:2px,color:#ffffff
style C fill:#D6EBEB,stroke:#0D6E6E,color:#0E1116
style D fill:#F7DCD8,stroke:#C5453A,color:#0E1116
style E fill:#F5E27A,stroke:#A9A088,color:#0E1116
# Core + Hugging Face runtime (Linux, macOS, Windows; CPU or CUDA)
pip install --upgrade "openmed[hf]"
# Add the REST service
pip install --upgrade "openmed[hf,service]"
# Apple Silicon acceleration (MLX)
pip install --upgrade "openmed[mlx]"|
Python-API from openmed import analyze_text
analyze_text(
"Patient received 75mg "
"clopidogrel for NSTEMI.",
model_name=
"pharma_detection_superclinical",
) |
REST-service uvicorn openmed.service.app:app \
--host 0.0.0.0 --port 8080
|
Batch from openmed import BatchProcessor
p = BatchProcessor(
model_name=
"disease_detection_superclinical",
group_entities=True,
)
p.process_texts([...]) |
Offline / air-gapped? Wijs model_name (of model_id) naar een lokale map en OpenMed laadt het zonder contact met de Hugging Face Hub:
from openmed import OpenMedConfig, analyze_text
result = analyze_text(
"Patient presents with chronic myeloid leukemia and Type 2 diabetes.",
model_id="./models/OpenMed-NER-DiseaseDetect-SuperClinical-434M",
config=OpenMedConfig(device="cpu"),
)Een samengesteld register van gespecialiseerde medische NER-modellen. Blader door de volledige catalogus.
| Model | Specialisatie | Entiteitstypen | Grootte |
|---|---|---|---|
disease_detection_superclinical |
Ziekten & aandoeningen | DISEASE, CONDITION, DIAGNOSIS | 434M |
pharma_detection_superclinical |
Geneesmiddelen & medicatie | DRUG, MEDICATION, TREATMENT | 434M |
pii_superclinical_large |
PII & de-identificatie | NAME, DATE, SSN, PHONE, EMAIL, ADDRESS | 434M |
anatomy_detection_electramed |
Anatomie & lichaamsdelen | ANATOMY, ORGAN, BODY_PART | 109M |
gene_detection_genecorpus |
Genen & eiwitten | GENE, PROTEIN | 109M |
from openmed import extract_pii, deidentify
text = "Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789"
# Extract PII with smart merging (prevents tokenization fragmentation)
result = extract_pii(text, model_name="pii_superclinical_large", use_smart_merging=True)
# De-identify with the method you need
deidentify(text, method="mask") # [NAME], [DATE]
deidentify(text, method="replace") # Faker-backed, locale-aware, format-preserving fakes
deidentify(text, method="hash") # Cryptographic hashing
deidentify(text, method="shift_dates", date_shift_days=180)- Slimme entiteitssamenvoeging houdt
01/15/1970heel in plaats van het te fragmenteren. - Faker-gebaseerde verhulling met aangepaste providers voor klinische ID's (CPF, CNPJ, BSN, NIR, Codice Fiscale, NIE, Aadhaar, Steuer-ID, NPI).
- HIPAA-grens: op Safe Harbor afgestemde categorieën en instelbare drempels zijn implementatiehulpmiddelen; deskundige implementatiebeoordeling blijft vereist en alleen SDK-gebruik toont geen naleving aan.
Volledig PII-notebook · Slimme samenvoeging · Anonimisering
Privacy Filter-familie: drie modelfamilies op de OpenAI Privacy Filter-architectuur
De modelcode is identiek (gpt-oss-achtige sparse-MoE-transformer met lokale attention, sink-tokens, RoPE+YaRN, tiktoken-o200k_base-tokenisatie); alleen de trainingsdata verschilt. Alle gebruiken dezelfde extract_pii() / deidentify()-API. Alleen het argument model_name= verandert.
| Variant | PyTorch (CPU + CUDA) | MLX (Apple Silicon) | MLX 8-bit |
|---|---|---|---|
| OpenAI Privacy Filter | openai/privacy-filter |
OpenMed/privacy-filter-mlx |
…-mlx-8bit |
| Nemotron-PII fine-tune | OpenMed/privacy-filter-nemotron |
…-nemotron-mlx |
…-nemotron-mlx-8bit |
| OpenMed Multilingual | OpenMed/privacy-filter-multilingual |
…-multilingual-mlx |
…-multilingual-mlx-8bit |
from openmed import extract_pii
text = "Patient Sarah Connor (DOB: 03/15/1985) at MRN 4471882."
extract_pii(text, model_name="openai/privacy-filter") # PyTorch baseline
extract_pii(text, model_name="OpenMed/privacy-filter-nemotron") # same code, different weights
extract_pii(text, model_name="OpenMed/privacy-filter-mlx") # Apple Silicon (MLX)Op niet-Apple-Silicon-hosts worden MLX-modelnamen automatisch vervangen door het bijbehorende PyTorch-checkpoint (met een eenmalige waarschuwing). Schrijf één modelnaam, draai overal. Zie Privacy Filter-architectuur & backend-routing.
Extractie en de-identificatie in en, fr, de, it, es, nl, hi, te, pt, ar, ja en tr, in totaal de geregistreerde PII-modelcatalogus.
python -c "from openmed import extract_pii; print([(e.label, e.text) for e in extract_pii('Dr. Pedro Almeida, CPF: 123.456.789-09, email: pedro@hospital.pt', lang='pt').entities])"Voorbeelden per taal tonen (Portugees, Nederlands, Hindi, Arabisch, Japans, Turks)
from openmed import extract_pii
portuguese = extract_pii("Paciente: Pedro Almeida, CPF: 123.456.789-09, telefone: +351 912 345 678", lang="pt", use_smart_merging=True)
dutch = extract_pii("Patiënt: Eva de Vries, BSN: 123456782, telefoon: +31 6 12345678", lang="nl", use_smart_merging=True)
hindi = extract_pii("रोगी: अनीता शर्मा, फोन: +91 9876543210, पता: नई दिल्ली 110001", lang="hi", use_smart_merging=True)
arabic = extract_pii("المريضة ليلى حسن، الهاتف +20 10 1234 5678، الرقم القومي 29801011234567.", lang="ar", use_smart_merging=True)
japanese = extract_pii("患者 佐藤 花子、電話 +81 90 1234 5678、マイナンバー 1234 5678 9012.", lang="ja", use_smart_merging=True)
turkish = extract_pii("Hasta Ayşe Yılmaz, telefon +90 532 123 45 67, TCKN 10000000146.", lang="tr", use_smart_merging=True)
for r in (portuguese, dutch, hindi, arabic, japanese, turkish):
print([(e.label, e.text) for e in r.entities])Een Docker-vriendelijke FastAPI-service met requestvalidatie, gedeelde pipeline-preload en uniforme foutenveloppen.
pip install --upgrade "openmed[hf,service]"
uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080
# or with Docker
docker build -t openmed:local .
docker run --rm -p 8080:8080 -e OPENMED_PROFILE=prod openmed:localcurl -X POST http://127.0.0.1:8080/pii/extract \
-H "Content-Type: application/json" \
-d '{"text":"Paciente: Maria Garcia, DNI: 12345678Z","lang":"es"}'Zie de volledige REST-service-handleiding.
Volledige handleidingen op openmed.life/docs.
| Aan de slag | Tekst analyseren | Modelregister |
| PII-detectiegids | Anonimisering | Batchverwerking |
| Configuratieprofielen | REST-service | MLX-backend |
De bewaker van OpenMed is een pluizige Perzische kat in de gedaante van een kleine Avicenna (Ibn Sina), de grote Perzische arts wiens Canon van de geneeskunde zo'n 600 jaar lang hét medische standaardwerk ter wereld was. Hij waakt over het opengeslagen boek van medische kennis, in een palet geïnspireerd op Perzisch turkoois (fīrūza): een local-first bewaker voor je meest private data.
Bijdragen zijn welkom: bugrapporten, featureverzoeken en PR's.
- Een issue openen
- Vertalingen welkom: help de README's in andere talen te voltooien die in de taalschakelaar bovenaan staan.
OpenMed bouwt voort op uitstekend opensourcewerk, met speciale dank aan OpenAI (de Privacy Filter-architectuur), NVIDIA (de Nemotron PII-dataset), Hugging Face (transformers en het modelecosysteem), Apple (MLX) en de maintainers van Faker.
De broncode van de OpenMed SDK wordt uitgebracht onder de Apache-2.0 License.
Als OpenMed nuttig is in je onderzoek, citeer het dan:
@misc{panahi2025openmedneropensourcedomainadapted,
title={OpenMed NER: Open-Source, Domain-Adapted State-of-the-Art Transformers for Biomedical NER Across 12 Public Datasets},
author={Maziyar Panahi},
year={2025},
eprint={2508.01630},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2508.01630},
}Als OpenMed nuttig voor je is, helpt een ster anderen om het te ontdekken.
4,700+ GitHub stars · 29 Jul 2026 snapshot
Gemaakt door het OpenMed-team