|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| from datasets import load_dataset
|
| from config import (
|
| DATASET_NAME,
|
| DATASET_SPLITS,
|
| MEDICAL_KNOWLEDGE_FILE
|
| )
|
| import os
|
|
|
|
|
|
|
|
|
| def load_split(split_name):
|
| try:
|
| print(f" Loading '{split_name}' split...")
|
| dataset = load_dataset(DATASET_NAME, split=split_name)
|
| print(f" β
Loaded {len(dataset)} rows")
|
| return dataset
|
| except Exception as e:
|
| print(f" β οΈ Failed to load '{split_name}': {e}")
|
| return None
|
|
|
|
|
|
|
|
|
| def row_to_text(row, split_name):
|
| disease = str(row.get("Disease", "")).strip()
|
| symptoms = str(row.get("Symptoms", "")).strip()
|
| treatment = str(row.get("Treatments","")).strip()
|
|
|
|
|
| if not disease or not symptoms:
|
| return None
|
| if len(symptoms) < 10:
|
| return None
|
|
|
|
|
| text = f"DISEASE: {disease}\n"
|
| text += f"SYMPTOMS: {symptoms}\n"
|
| if treatment:
|
| text += f"TREATMENTS: {treatment}\n"
|
| text += f"SOURCE_SPLIT: {split_name}\n"
|
|
|
| return text
|
|
|
|
|
|
|
|
|
| def save_knowledge_base(entries):
|
| os.makedirs("data", exist_ok=True)
|
|
|
| with open(MEDICAL_KNOWLEDGE_FILE, "w", encoding="utf-8") as f:
|
| for entry in entries:
|
| f.write(entry)
|
| f.write("\n---\n\n")
|
|
|
| print(f"\nβ
Saved {len(entries)} entries to {MEDICAL_KNOWLEDGE_FILE}")
|
|
|
|
|
|
|
|
|
| if __name__ == "__main__":
|
| print("=== Medical Report Analyzer β Data Preparation ===\n")
|
|
|
| all_entries = []
|
| seen_diseases = set()
|
|
|
|
|
| print("Step 1: Loading dataset splits...")
|
| for split_name in DATASET_SPLITS:
|
| dataset = load_split(split_name)
|
| if dataset is None:
|
| continue
|
|
|
| split_entries = 0
|
| for row in dataset:
|
| text = row_to_text(row, split_name)
|
| if text is None:
|
| continue
|
|
|
|
|
| key = row.get("Disease","").strip().lower()
|
| symptoms_key = row.get("Symptoms","").strip().lower()[:50]
|
| unique_key = f"{key}_{symptoms_key}"
|
|
|
| if unique_key not in seen_diseases:
|
| seen_diseases.add(unique_key)
|
| all_entries.append(text)
|
| split_entries += 1
|
|
|
| print(f" β
{split_name}: added {split_entries} unique entries")
|
|
|
| print(f"\nTotal unique entries: {len(all_entries)}")
|
|
|
| if not all_entries:
|
| print("β No entries collected. Check dataset loading.")
|
| exit()
|
|
|
|
|
| print("\nStep 2: Saving knowledge base...")
|
| save_knowledge_base(all_entries)
|
|
|
|
|
| print("\n=== VERIFICATION ===")
|
| file_size = os.path.getsize(MEDICAL_KNOWLEDGE_FILE)
|
| print(f"β
File exists: {os.path.exists(MEDICAL_KNOWLEDGE_FILE)}")
|
| print(f"β
File size: {file_size:,} bytes")
|
| print(f"β
Total entries: {len(all_entries)}")
|
|
|
|
|
| print("\n=== PREVIEW (first 3 entries) ===")
|
| for i, entry in enumerate(all_entries[:3]):
|
| print(f"--- Entry {i+1} ---")
|
| print(entry)
|
|
|
| print("β
Data preparation complete!")
|
| print("Next step: Run build_faiss.py") |