| |
| """ |
| Demo script to test the medical transcription correction and report generation system. |
| """ |
|
|
| import json |
| from pathlib import Path |
| from corrector.llm_corrector import MedicalLLMCorrector |
| from corrector.report_generator import generate_report_from_json |
|
|
| |
| EXAMPLE_TRANSCRIPTION = """На серии МР-томограмм, выполненных в двух плоскостях, лордоз сохранен. Просвет позвоночного канала на уровне L3 позвонка 1,5см. Высота межпозвонковых дисков сохранена, сигналы от дисков L4-S1 по Т2 снижены, сигналы от остальных дисков исследуемой зоны сохранены. |
| |
| Дорзальная медианно-парамедианная грыжа диска (по типу протрузии) L4/L5, размером до 0,5см, умеренно деформирующая прилежащие отделы дурального мешка, распространяющаяся в оба межпозвонковых отверстия с их сужением. |
| |
| Дорзальная правосторонняя медианно-парамедианная грыжа диска (по типу протрузии) L5/S1, размером до 0,7см, компремирующая прилежащие отделы дурального мешка, распространяющаяся в оба межпозвонковых отверстия с их сужением в большей степени правого межпозвонкового отверстия с касанием и деформацией правого нервного корешка. |
| |
| Дугоотростчатые суставы на уровне L3-S1 с явлениями артроза в виде гипертрофии фасеток и формирования краевых остеофитов – 2 ст., что в совокупности с указанными изменениями межпозвонковых дисков приводит к дополнительному стенозированию межпозвонковых отверстий и уменьшению эффективного диаметра позвоночного канала. |
| |
| Сигнал от структур спинного мозга (по Т1 и Т2) не изменён. Форма и размеры тел позвонков обычные. Замыкательные пластинки тел L4-S1 позвонков деформированы за счет формирования краевых остеофитов и дефектов Шморля тел L4-S1 позвонков с признаками субхондральных изменений (Modic 1-2). |
| |
| Заключение: |
| МР картина дегенеративно-дистрофических изменений пояснично-крестцового отдела позвоночника. |
| Грыжи дисков L4-S1 по типу протрузий. |
| Признаки спондилоартроза L3-S1. Спондилез. |
| |
| Рекомендовано: |
| Консультация лечащего врача.""" |
|
|
|
|
| def create_example_corrected_json(output_path: Path): |
| """Create an example corrected JSON file for testing.""" |
| data = { |
| "original_file": "result_example.json", |
| "processing_timestamp": "2026-01-15T10:00:00", |
| "llm_model": "gpt-4o", |
| "transcription_original": "Оригинальная транскрипция с ошибками...", |
| "original_timestamp": "2026-01-12T18:27:50", |
| "audio_file": "audio_example.wav", |
| "language": "ru", |
| "medical_prompt_used": True, |
| "transcription_corrected": EXAMPLE_TRANSCRIPTION, |
| "corrections_applied": 5, |
| "corrections_detail": [ |
| { |
| "type": "replace", |
| "original": "дарзальная", |
| "corrected": "дорзальная", |
| "position": 25 |
| }, |
| { |
| "type": "replace", |
| "original": "дугоотрощатые", |
| "corrected": "дугоотростчатые", |
| "position": 42 |
| } |
| ] |
| } |
| |
| with open(output_path, 'w', encoding='utf-8') as f: |
| json.dump(data, f, ensure_ascii=False, indent=2) |
| |
| print(f"✓ Created example file: {output_path}") |
| return output_path |
|
|
|
|
| def demo_report_generation(): |
| """Demonstrate DOCX report generation.""" |
| print("=" * 70) |
| print("Medical Transcription Report Generator - DEMO") |
| print("=" * 70) |
| print() |
| |
| |
| results_dir = Path("results") |
| results_dir.mkdir(exist_ok=True) |
| |
| reports_dir = results_dir / "reports" |
| reports_dir.mkdir(exist_ok=True) |
| |
| |
| example_json = results_dir / "result_example_corrected.json" |
| create_example_corrected_json(example_json) |
| print() |
| |
| |
| print("Generating DOCX report...") |
| print("-" * 70) |
| |
| report_path = generate_report_from_json( |
| corrected_json_path=example_json, |
| output_dir=reports_dir, |
| patient_name="Стрельникова Анна Владимировна", |
| patient_dob="16.02.1996", |
| study_area="Поясничный отдел позвоночника + копчик", |
| doctor_name="Камалетдинов Э.А" |
| ) |
| |
| if report_path: |
| print(f"✓ Report generated successfully!") |
| print(f" Location: {report_path}") |
| print(f" Size: {report_path.stat().st_size} bytes") |
| print() |
| print("You can open this file in Microsoft Word or LibreOffice.") |
| else: |
| print("✗ Failed to generate report") |
| |
| print() |
| print("=" * 70) |
| print("Demo completed!") |
| print("=" * 70) |
|
|
|
|
| if __name__ == "__main__": |
| try: |
| demo_report_generation() |
| except Exception as e: |
| print(f"Error: {e}") |
| import traceback |
| traceback.print_exc() |
|
|