SQU-Medical-Library / nlm_database.py
saifom's picture
Update nlm_database.py
db7ef09 verified
Raw
History Blame
5.89 kB
# nlm_database.py
NLM_FULL_CLASSIFICATION = {
"W": {"name": "Health Professions", "description": "General works on medicine and health",
"subcategories": {
"W 1": {"name": "Reference Works", "description": "Medical encyclopedias, dictionaries, directories"},
"W 13": {"name": "Dictionaries", "description": "Medical dictionaries and terminology"},
"W 15": {"name": "Nomenclature", "description": "Classification systems and nomenclature"},
"W 18": {"name": "Medical Education", "description": "Textbooks, teaching materials, curriculum"},
"W 20": {"name": "Research", "description": "Medical research methodology"},
"W 20.5": {"name": "Research Methodology", "description": "Study design, statistics in medicine"},
"W 21": {"name": "Computer Applications", "description": "Medical informatics, computer applications"},
"W 26": {"name": "Medical Writing", "description": "Scientific writing, medical journalism"},
"W 50": {"name": "Ethics", "description": "Medical ethics, bioethics"},
"W 62": {"name": "Forensic Medicine", "description": "Legal medicine, medical jurisprudence"},
"W 74": {"name": "Medical Economics", "description": "Health economics, medical finance"},
"W 76": {"name": "Practice Management", "description": "Medical practice administration"},
"W 84": {"name": "Health Facilities", "description": "Hospitals, clinics, health centers"},
"W 85": {"name": "Medical Personnel", "description": "Physicians, nurses, allied health personnel"},
"W 87": {"name": "Medical Societies", "description": "Professional organizations"},
"W 89": {"name": "Family Practice", "description": "General practice, primary care"}
}},
"WA": {"name": "Public Health", "description": "Public health, preventive medicine",
"subcategories": {
"WA 1": {"name": "Reference Works", "description": "Public health reference materials"},
"WA 100": {"name": "Epidemiology", "description": "Disease distribution and determinants"},
"WA 105": {"name": "Statistics", "description": "Vital statistics, health statistics"},
"WA 200": {"name": "Environmental Health", "description": "Environmental factors affecting health"},
"WA 250": {"name": "Occupational Health", "description": "Workplace health and safety"},
"WA 300": {"name": "Disease Prevention", "description": "Preventive medicine, vaccination"},
"WA 390": {"name": "Nutrition", "description": "Nutrition and public health"},
"WA 395": {"name": "Health Promotion", "description": "Health education, wellness promotion"},
"WA 400": {"name": "Health Services", "description": "Health care delivery systems"},
"WA 525": {"name": "Maternal Health", "description": "Maternal and child health services"},
"WA 590": {"name": "Mental Health", "description": "Community mental health services"}
}},
# يمكنك إضافة المزيد من التصنيفات هنا إذا أردت
}
def get_nlm_category(code: str) -> dict:
main_category = code.split()[0] if ' ' in code else code
subcategory = code.split()[1] if ' ' in code else None
if main_category in NLM_FULL_CLASSIFICATION:
category_info = NLM_FULL_CLASSIFICATION[main_category]
if subcategory and subcategory in category_info.get('subcategories', {}):
return {
'main_category': main_category,
'main_name': category_info['name'],
'main_description': category_info['description'],
'subcategory': subcategory,
'subcategory_name': category_info['subcategories'][subcategory]['name'],
'subcategory_description': category_info['subcategories'][subcategory]['description']
}
return {
'main_category': main_category,
'main_name': category_info['name'],
'main_description': category_info['description']
}
return {'error': 'Classification not found'}
def search_nlm_by_keyword(keyword: str) -> list:
results = []
keyword_lower = keyword.lower()
for main_code, main_info in NLM_FULL_CLASSIFICATION.items():
main_name = main_info['name'].lower()
main_desc = main_info['description'].lower()
if (keyword_lower in main_name or keyword_lower in main_desc or keyword_lower in main_code.lower()):
results.append({
'code': main_code,
'name': main_info['name'],
'description': main_info['description'],
'type': 'main_category'
})
for sub_code, sub_info in main_info.get('subcategories', {}).items():
full_code = f"{main_code} {sub_code}" if sub_code != '1' else main_code
sub_name = sub_info['name'].lower()
sub_desc = sub_info['description'].lower()
if (keyword_lower in sub_name or keyword_lower in sub_desc or keyword_lower in full_code.lower()):
results.append({
'code': full_code,
'name': sub_info['name'],
'description': sub_info['description'],
'type': 'subcategory'
})
return results[:20]
def validate_nlm_code(code: str) -> dict:
result = get_nlm_category(code)
if 'error' not in result:
return {
'valid': True,
'code': code,
'details': result
}
suggestions = search_nlm_by_keyword(code.split()[0] if ' ' in code else code)
return {
'valid': False,
'code': code,
'suggestions': suggestions[:5]
}