---
## نمایشِ زنده
حذف بلادرنگِ اطلاعات شناساییکننده — فیلترِ حریمِ خصوصیِ Nemotron در حال پنهانسازیِ نامها، نشانیها، شناسهها و اطلاعات صورتحساب از یک برگهٔ ترخیص بالینی، کاملاً روی دستگاه. (همهٔ مقادیر نمایشدادهشده ساختگیاند.)
---
## مثالِ 30ثانیهای
```python
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.95
```
یک مدلِ پیشرفتهٔ NER بالینی که بهصورت محلی اجرا میشود — بدون کلید API، بدون تماس شبکهای.
---
## چرا OpenMed؟
| | **OpenMed** | APIهای ابریِ پزشکی |
| ------------------------------------- | :----------------------: | :--------------------: |
| اجرا روی دستگاه/سرورهای شما | ✅ | ❌ |
| خروج دادههای بیمار از شبکهٔ شما | **هرگز** | ارسال به تأمینکننده |
| هزینه | رایگان و متنباز | هزینه بهازای هر فراخوان |
| مدلهای تخصصی پزشکی | 1,000+ | محدود |
| زبانها | 12+ | متغیر |
| آفلاین / ایزوله (air-gapped) | ✅ | ❌ |
| شتابدهیِ Apple Silicon (MLX) | ✅ | ندارد |
| اپهای بومیِ iOS / macOS | ✅ از طریق OpenMedKit | ❌ |
| وابستگی به تأمینکننده | ندارد — Apache-2.0 | دارد |
- **مدلهای تخصصی** — بیش از 1,000 مدلِ زیستپزشکی و بالینیِ گزینششده که بسیاری از آنها از راهکارهای انحصاری بهتر عمل میکنند.
- **حذف هویتِ سازگار با HIPAA** — هر 18 شناسهٔ Safe Harbor، ادغامِ هوشمندِ موجودیتها، و جایگزینهای ساختگیِ حافظِ قالب.
- **همهجا اجرا میشود** — CPU، CUDA، Apple Silicon (MLX)، و بهصورت بومی در اپهای iOS/macOS از طریق OpenMedKit.
- **استقرارِ یکخطی** — API پایتون، سرویس REST داکرایزشده، یا خطلولههای دستهای.
- **بدون قفلشدگی** — Apache-2.0، زیرساختِ شما، دادهٔ شما.
---
## روی دستگاه، روی Apple — Swift، MLX و iOS
OpenMed برای اجرا در همانجایی که دادههایتان زندگی میکنند ساخته شده است. روی سختافزارِ Apple با **MLX**
شتاب میگیرد و از طریق **[OpenMedKit](swift/OpenMedKit)** مستقیماً به اپهای iPhone، iPad و Mac میرسد —
بهطوریکه تشخیصِ PII و استخراجِ بالینی کاملاً آفلاین و روی خودِ دستگاه انجام میشود.
```swift
// Add OpenMedKit to your app
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.5.5"),
]
```
- **زماناجرای MLX** برای دستهبندیِ توکنیِ PII، خانوادهٔ Privacy Filter و وظایفِ zero-shot آزمایشیِ خانوادهٔ GLiNER — بههمراه مسیرِ جایگزینِ CoreML.
- **یک نامِ مدل، همهٔ پلتفرمها** — نامهای مدلِ MLX روی سختافزارِ غیرApple بهطور خودکار به نقطهبازرسیِ متناظرِ PyTorch بازمیگردند.
- **پایتون روی Apple Silicon** هم: `pip install "openmed[mlx]"`.
راهنماها: [بکاندِ MLX](docs/mlx-backend.md) · [OpenMedKit (Swift)](docs/swift-openmedkit.md) · [خروجیِ CoreML](docs/coreml-export.md)
---
## چگونه کار میکند
```mermaid
flowchart LR
A["متن بالینی"] --> B["OpenMed
(100٪ روی دستگاه)"]
B --> C["موجودیتهای پزشکی"]
B --> D["PII شناساییشده"]
B --> E["متنِ حذفهویتشده"]
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
```
---
## شروع سریع
```bash
# Core + Hugging Face runtime (Linux, macOS, Windows; CPU or CUDA)
pip install "openmed[hf]"
# Add the REST service
pip install "openmed[hf,service]"
# Apple Silicon acceleration (MLX)
pip install "openmed[mlx]"
```
|
**API پایتون**
```python
from openmed import analyze_text
analyze_text(
"Patient received 75mg "
"clopidogrel for NSTEMI.",
model_name=
"pharma_detection_superclinical",
)
```
|
**سرویس REST**
```bash
uvicorn openmed.service.app:app \
--host 0.0.0.0 --port 8080
```
`GET /health`
`POST /analyze`
`POST /pii/extract`
`POST /pii/deidentify`
|
**دستهای**
```python
from openmed import BatchProcessor
p = BatchProcessor(
model_name=
"disease_detection_superclinical",
group_entities=True,
)
p.process_texts([...])
```
|
**آفلاین / ایزوله؟** کافی است `model_name` (یا `model_id`) را به یک پوشهٔ محلی اشاره دهید تا OpenMed آن را بدونِ تماس با Hugging Face Hub بارگذاری کند:
```python
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"),
)
```
---
## مدلها
یک رجیستریِ گزینششده از مدلهای تخصصیِ NER پزشکی — [کاتالوگِ کامل](https://openmed.life/docs/model-registry) را مرور کنید.
| مدل | تخصص | انواعِ موجودیت | اندازه |
|-----|------|---------------|--------|
| `disease_detection_superclinical` | بیماریها و شرایط | DISEASE, CONDITION, DIAGNOSIS | 434M |
| `pharma_detection_superclinical` | داروها | DRUG, MEDICATION, TREATMENT | 434M |
| `pii_superclinical_large` | PII و حذفِ هویت | NAME, DATE, SSN, PHONE, EMAIL, ADDRESS | 434M |
| `anatomy_detection_electramed` | آناتومی و اعضای بدن | ANATOMY, ORGAN, BODY_PART | 109M |
| `gene_detection_genecorpus` | ژنها و پروتئینها | GENE, PROTEIN | 109M |
---
## حریمِ خصوصی: تشخیص و حذفِ PII
```python
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)
```
- **ادغامِ هوشمندِ موجودیتها** تاریخِ `01/15/1970` را بهجای تکهتکهشدن، یکپارچه نگه میدارد.
- **مبهمسازیِ مبتنی بر Faker** با ارائهدهندههای سفارشیِ شناسههای بالینی (CPF، CNPJ، BSN، NIR، Codice Fiscale، NIE، Aadhaar، Steuer-ID، NPI).
- **HIPAA**: هر 18 شناسهٔ Safe Harbor، با آستانههای اطمینانِ قابلتنظیم.
[نوتبوکِ کاملِ PII](examples/notebooks/PII_Detection_Complete_Guide.ipynb) · [ادغامِ هوشمند](docs/pii-smart-merging.md) · [ناشناسسازی](docs/anonymization.md)
خانوادهٔ Privacy Filter — سه خانوادهٔ مدل بر پایهٔ معماریِ OpenAI Privacy Filter
کدِ مدل یکسان است (ترانسفورمرِ sparse-MoE به سبکِ gpt-oss با توجهِ محلی، توکنهای sink، RoPE+YaRN، توکنایزرِ tiktoken `o200k_base`)، فقط دادهٔ آموزشی متفاوت است. همه از طریقِ **همان** APIِ `extract_pii()` / `deidentify()` کار میکنند — تنها آرگومانِ `model_name=` تغییر میکند.
| گونه | PyTorch (CPU + CUDA) | MLX (Apple Silicon) | MLX ۸-بیتی |
| --- | --- | --- | --- |
| **OpenAI Privacy Filter** | [`openai/privacy-filter`](https://huggingface.co/openai/privacy-filter) | [`OpenMed/privacy-filter-mlx`](https://huggingface.co/OpenMed/privacy-filter-mlx) | [`…-mlx-8bit`](https://huggingface.co/OpenMed/privacy-filter-mlx-8bit) |
| **Nemotron-PII fine-tune** | [`OpenMed/privacy-filter-nemotron`](https://huggingface.co/OpenMed/privacy-filter-nemotron) | [`…-nemotron-mlx`](https://huggingface.co/OpenMed/privacy-filter-nemotron-mlx) | [`…-nemotron-mlx-8bit`](https://huggingface.co/OpenMed/privacy-filter-nemotron-mlx-8bit) |
| **OpenMed Multilingual** | [`OpenMed/privacy-filter-multilingual`](https://huggingface.co/OpenMed/privacy-filter-multilingual) | [`…-multilingual-mlx`](https://huggingface.co/OpenMed/privacy-filter-multilingual-mlx) | [`…-multilingual-mlx-8bit`](https://huggingface.co/OpenMed/privacy-filter-multilingual-mlx-8bit) |
```python
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)
```
روی میزبانهای غیرApple-Silicon، نامهای مدلِ MLX بهطور خودکار با نقطهبازرسیِ متناظرِ PyTorch جایگزین میشوند (با یک هشدارِ یکباره) — یک نامِ مدل بنویسید، همهجا اجرا کنید. [معماریِ Privacy Filter و مسیریابیِ بکاند](docs/anonymization.md#privacy-filter-family) را ببینید.
---
## PII چندزبانه (12 زبان)
استخراج و حذفِ هویت در زبانهای `en`، `fr`، `de`، `it`، `es`، `nl`، `hi`، `te`، `pt`، `ar`، `ja` و `tr` — در مجموع **247 نقطهبازرسیِ PII**.
```bash
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])"
```
نمونههای هر زبان (پرتغالی، هلندی، هندی، عربی، ژاپنی، ترکی)
```python
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])
```
---
## REST API
یک سرویسِ FastAPI سازگار با Docker، با اعتبارسنجیِ درخواست، پیشبارگذاریِ خطلولهٔ مشترک و پاکتهای خطای یکپارچه.
```bash
pip install "openmed[hf,service]"
uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080
# or with Docker
docker build -t openmed:1.5.5 .
docker run --rm -p 8080:8080 -e OPENMED_PROFILE=prod openmed:1.5.5
```
```bash
curl -X POST http://127.0.0.1:8080/pii/extract \
-H "Content-Type: application/json" \
-d '{"text":"Paciente: Maria Garcia, DNI: 12345678Z","lang":"es"}'
```
راهنمای کاملِ [سرویس REST](docs/rest-service.md) را ببینید.
---
## مستندات
راهنماهای کامل در **[openmed.life/docs](https://openmed.life/docs/)**.
| | | |
|---|---|---|
| [شروع به کار](https://openmed.life/docs/) | [تحلیلِ متن](https://openmed.life/docs/analyze-text) | [رجیستریِ مدل](https://openmed.life/docs/model-registry) |
| [راهنمای تشخیصِ PII](examples/notebooks/PII_Detection_Complete_Guide.ipynb) | [ناشناسسازی](docs/anonymization.md) | [پردازشِ دستهای](https://openmed.life/docs/batch-processing) |
| [پروفایلهای پیکربندی](https://openmed.life/docs/profiles) | [سرویس REST](docs/rest-service.md) | [بکاندِ MLX](docs/mlx-backend.md) |
---
## با نمادِ ما آشنا شوید

نگهبانِ OpenMed یک گربهٔ ایرانیِ پشمالوست که بهشکلِ بوعلی سینا (ابنسینا) درآمده — پزشکِ بزرگِ ایرانی که
کتابِ «قانون در طب» او نزدیک به 600 سال متنِ پزشکیِ مرجعِ جهان بود. او نگهبانِ کتابِ گشودهٔ دانشِ پزشکی است،
با پالتی برگرفته از فیروزهٔ ایرانی: نگهبانی محلیمحور برای خصوصیترین دادههای شما.
---
## مشارکت
از مشارکتها استقبال میکنیم — گزارشِ اشکال، درخواستِ ویژگی و Pull Requestها.
- [ثبتِ یک issue](https://github.com/maziyarpanahi/openmed/issues)
- **ترجمهها پذیرفته میشوند** — به تکمیلِ READMEهای زبانهای دیگر (در سوییچرِ بالای صفحه) کمک کنید.
## سپاسگزاری
OpenMed بر پایهٔ کارهای عالیِ متنباز ساخته شده — با سپاسِ ویژه از **OpenAI** (معماریِ [Privacy Filter](https://huggingface.co/openai/privacy-filter))، **NVIDIA** (مجموعهدادهٔ [Nemotron PII](https://huggingface.co/datasets/nvidia/Nemotron-PII-v1))، **Hugging Face** (`transformers` و اکوسیستمِ مدل)، **Apple** ([MLX](https://github.com/ml-explore/mlx))، و نگهدارندگانِ **[Faker](https://faker.readthedocs.io/)**.
## مجوز
تحتِ [مجوزِ Apache-2.0](LICENSE) منتشر شده است.
## استناد
اگر OpenMed در پژوهشِ شما مفید بود، لطفاً به آن استناد کنید:
```bibtex
@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},
}
```
---
## تاریخچهٔ ستارهها
اگر OpenMed برایتان مفید است، یک ستاره به دیگران کمک میکند آن را پیدا کنند.
---