Mintik24's picture
🎉 Полный рефакторинг проекта Medical Transcriber
e275025
#!/usr/bin/env python3
"""
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 corrected transcription data
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()
# Create results directory if needed
results_dir = Path("results")
results_dir.mkdir(exist_ok=True)
reports_dir = results_dir / "reports"
reports_dir.mkdir(exist_ok=True)
# Create example corrected JSON
example_json = results_dir / "result_example_corrected.json"
create_example_corrected_json(example_json)
print()
# Generate report
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()