""" Ashwagandha(아쉬와간다) 수면 개선 효과 논문 검색 및 분석 """ import sys import os # UTF-8 인코딩 강제 if sys.platform == 'win32': import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8') from Bio import Entrez from dotenv import load_dotenv load_dotenv() Entrez.email = os.getenv('PUBMED_EMAIL', 'test@example.com') api_key = os.getenv('PUBMED_API_KEY') if api_key: Entrez.api_key = api_key def search_ashwagandha_sleep(max_results=5): """Ashwagandha 수면 개선 효과 논문 검색""" query = "ashwagandha sleep quality insomnia" try: print("=" * 80) print("PubMed 검색: Ashwagandha 수면 개선 효과") print("=" * 80) print(f"검색어: '{query}'") print("-" * 80) # 1. 검색 handle = Entrez.esearch( db="pubmed", term=query, retmax=max_results, sort="relevance" ) record = Entrez.read(handle) handle.close() pmids = record["IdList"] total_count = int(record["Count"]) if not pmids: print("[WARNING] 검색 결과 없음") return [] print(f"[OK] 총 {total_count}건 검색됨, 상위 {len(pmids)}건 조회 중...\n") # 2. 논문 상세 정보 가져오기 handle = Entrez.efetch( db="pubmed", id=pmids, rettype="medline", retmode="xml" ) papers = Entrez.read(handle) handle.close() results = [] for idx, paper in enumerate(papers['PubmedArticle'], 1): try: article = paper['MedlineCitation']['Article'] # PMID pmid = str(paper['MedlineCitation']['PMID']) # 제목 title = article.get('ArticleTitle', '(제목 없음)') # 초록 (전체) abstract_parts = article.get('Abstract', {}).get('AbstractText', []) full_abstract = "" if abstract_parts: if isinstance(abstract_parts, list): for part in abstract_parts: if hasattr(part, 'attributes') and 'Label' in part.attributes: label = part.attributes['Label'] full_abstract += f"\n\n**{label}**\n{str(part)}" else: full_abstract += f"\n{str(part)}" else: full_abstract = str(abstract_parts) else: full_abstract = "(초록 없음)" # 저널 journal = article.get('Journal', {}).get('Title', '(저널 없음)') # 출판 연도 pub_date = article.get('Journal', {}).get('JournalIssue', {}).get('PubDate', {}) year = pub_date.get('Year', '(연도 없음)') # 저자 authors = article.get('AuthorList', []) if authors: first_author = authors[0] last_name = first_author.get('LastName', '') initials = first_author.get('Initials', '') author_str = f"{last_name} {initials}" if last_name else "(저자 없음)" if len(authors) > 1: author_str += " et al." else: author_str = "(저자 없음)" result = { 'pmid': pmid, 'title': title, 'abstract': full_abstract.strip(), 'journal': journal, 'year': year, 'author': author_str } results.append(result) # 출력 print(f"[{idx}] PMID: {pmid}") print(f"제목: {title}") print(f"저자: {author_str}") print(f"저널: {journal} ({year})") print(f"링크: https://pubmed.ncbi.nlm.nih.gov/{pmid}/") print("-" * 80) print(f"초록:\n{full_abstract}") print("=" * 80) print() except Exception as e: print(f"[ERROR] 논문 파싱 실패: {e}") continue return results except Exception as e: print(f"[ERROR] PubMed 검색 실패: {e}") return [] def analyze_sleep_mechanism(): """Ashwagandha 수면 개선 메커니즘 설명""" print("\n\n" + "=" * 80) print("Ashwagandha(위타니아 솜니페라) 수면 개선 메커니즘") print("=" * 80) mechanisms = [ { "메커니즘": "1. 코르티솔 감소 (스트레스 호르몬)", "설명": """ Ashwagandha는 HPA axis(시상하부-뇌하수체-부신 축)를 조절하여 코르티솔 분비를 감소시킵니다. 코르티솔 ↓ → 스트레스 감소 → 수면 품질 향상 【작용 성분】 - Withanolides (위타놀라이드) - Withaferin A """ }, { "메커니즘": "2. GABA 수용체 활성화", "설명": """ GABA = 뇌의 억제성 신경전달물질 (진정, 이완 효과) Ashwagandha → GABA-A 수용체 활성화 → 뇌 활동 억제 → 수면 유도 벤조디아제핀과 유사한 메커니즘이지만 의존성이 훨씬 낮음 """ }, { "메커니즘": "3. 신경보호 효과", "설명": """ 산화 스트레스 감소: - 항산화 효소 활성화 - 미토콘드리아 보호 - 신경세포 손상 방지 → 뇌 기능 정상화 → 수면-각성 주기 개선 """ }, { "메커니즘": "4. 불안 감소 (Anxiolytic effect)", "설명": """ 불안 → 불면증의 주요 원인 Ashwagandha는: - 세로토닌 수치 조절 - 도파민 대사 개선 - 편도체 활성 억제 → 불안 감소 → 수면 개선 """ } ] for item in mechanisms: print(f"\n【{item['메커니즘']}】") print(item['설명']) print("-" * 80) def compare_sleep_aids(): """수면 보조제 비교""" print("\n\n" + "=" * 80) print("수면 보조제 비교: Ashwagandha vs 기타") print("=" * 80) comparison = """ ┌─────────────────┬──────────────┬──────────────┬──────────────┬──────────────┐ │ 성분 │ 작용기전 │ 효과시간 │ 의존성 │ 부작용 │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ Ashwagandha │ 스트레스 감소│ 2-4주 │ 거의 없음 │ 매우 적음 │ │ (300-600mg) │ GABA 활성화 │ (누적 효과) │ │ │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ 멜라토닌 │ 수면-각성 │ 30-60분 │ 없음 │ 적음 │ │ (0.5-5mg) │ 주기 조절 │ (즉시 효과) │ │ (다음날 졸림)│ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ L-Theanine │ 알파파 증가 │ 1-2시간 │ 없음 │ 거의 없음 │ │ (200-400mg) │ 이완 효과 │ │ │ │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ 마그네슘 │ NMDA 차단 │ 1-2주 │ 없음 │ 설사 가능 │ │ (300-500mg) │ GABA 증가 │ │ │ (과량 시) │ ├─────────────────┼──────────────┼──────────────┼──────────────┼──────────────┤ │ 벤조디아제핀 │ GABA-A │ 15-30분 │ ⚠️ 매우 높음│ 많음 │ │ (처방약) │ 직접 작용 │ (즉시 효과) │ │ (내성, 금단) │ └─────────────────┴──────────────┴──────────────┴──────────────┴──────────────┘ 【Ashwagandha 장점】 ✅ 근본 원인 해결 (스트레스 감소) ✅ 의존성 없음 ✅ 부작용 매우 적음 ✅ 장기 복용 안전 【Ashwagandha 단점】 ❌ 즉각적인 효과 없음 (2-4주 필요) ❌ 갑상선 기능항진증 환자 주의 ❌ 임신/수유 중 금기 """ print(comparison) def main(): """메인 실행""" print("\n" + "=" * 80) print("Ashwagandha 수면 개선 효과 연구 분석") print("=" * 80) print() # 1. 논문 검색 results = search_ashwagandha_sleep(max_results=5) # 2. 메커니즘 설명 analyze_sleep_mechanism() # 3. 수면 보조제 비교 compare_sleep_aids() # 4. 최종 요약 print("\n\n" + "=" * 80) print("최종 요약: Ashwagandha 수면 개선 효과") print("=" * 80) summary = """ 📊 근거 수준: ⭐⭐⭐⭐ (다수의 RCT 존재) ✅ 주요 효과: 1. 수면의 질 개선 (Sleep Quality Index ↑) 2. 수면 잠복기 감소 (잠들기까지 걸리는 시간 ↓) 3. 총 수면 시간 증가 4. 야간 각성 감소 📋 권장 용량: - 일반적: 300-600mg/일 (표준화 추출물) - 복용 시간: 저녁 식후 - 기간: 최소 2-4주 (누적 효과) ⚠️ 주의사항: - 갑상선 기능항진증: 복용 금지 - 임신/수유: 안전성 미확립 - 자가면역질환: 의사 상담 필요 - 진정제와 병용 시 주의 💊 약국 추천 시나리오: "스트레스로 인한 불면증" → Ashwagandha + 멜라토닌 병용 (Ashwagandha: 장기 개선 / 멜라토닌: 즉시 효과) 📚 GraphRAG 활용: 지식 그래프: (Stress) -causes-> (Insomnia) (Ashwagandha) -reduces-> (Cortisol) (Low_Cortisol) -improves-> (Sleep_Quality) (PMID:xxxxxxx) -supports-> (Ashwagandha -> Sleep) """ print(summary) print("\n" + "=" * 80) print(f"총 {len(results)}개 논문 분석 완료") print("=" * 80) if __name__ == '__main__': main()