feat: PubMed 기반 GraphRAG 연구 스크립트 추가

근거 기반 약물 추천을 위한 PubMed 논문 검색 및 분석 스크립트:

1. pubmed_search.py
   - PubMed 논문 검색 기본 템플릿
   - Biopython Entrez API 활용
   - 3가지 주제 검색 예시 포함

2. fetch_paper_abstract.py
   - PMID로 논문 초록 가져오기
   - 특정 논문 상세 정보 조회

3. analyze_statin_myopathy.py
   - Statin 근육병증과 CoQ10 보충 연구 분석
   - CK(Creatine Kinase) 측정의 의미 설명

4. ashwagandha_sleep_research.py
   - Ashwagandha의 수면 개선 효과 연구
   - 작용 메커니즘 분석 (코르티솔, GABA)
   - 다른 수면 보조제와 비교

5. naproxen_advantages_research.py
   - Naproxen의 심혈관 안전성 연구
   - NSAID 간 비교 분석
   - 약동학 및 업셀링 시나리오

6. pycnogenol_multi_indication_research.py
   - 피크노제놀의 7가지 적응증 연구
   - 발기부전, 당뇨망막병증, 정맥기능부전 등
   - 우선순위 점수화

7. pycnogenol_womens_health_research.py
   - 피크노제놀의 여성 건강 효능
   - 갱년기, 생리통, 피부 미용

8. sqlite_graph_example.py
   - SQLite 그래프 쿼리 예제
   - Cypher 스타일 추론 시연
   - GraphRAG 개념 실습

각 스크립트는 Windows 한글 인코딩 처리 포함.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-24 21:04:33 +09:00
parent de5b49d862
commit 97cf89a9c2
8 changed files with 2774 additions and 0 deletions

View File

@@ -0,0 +1,212 @@
"""
Statin 근육병증의 스펙트럼 분석
왜 CK 측정이 중요한가?
"""
import sys
import os
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')
def search_statin_myopathy_spectrum():
"""Statin 근육병증의 심각도 스펙트럼 관련 논문 검색"""
print("=" * 80)
print("Statin 근육병증의 종류와 CK의 관계")
print("=" * 80)
# 검색: Statin myopathy classification
query = "statin myopathy classification creatine kinase"
try:
handle = Entrez.esearch(
db="pubmed",
term=query,
retmax=3,
sort="relevance"
)
record = Entrez.read(handle)
handle.close()
pmids = record["IdList"]
if pmids:
handle = Entrez.efetch(
db="pubmed",
id=pmids,
rettype="medline",
retmode="xml"
)
papers = Entrez.read(handle)
handle.close()
print(f"\n관련 논문 {len(pmids)}건 발견:\n")
for idx, paper in enumerate(papers['PubmedArticle'], 1):
article = paper['MedlineCitation']['Article']
pmid = str(paper['MedlineCitation']['PMID'])
title = article.get('ArticleTitle', '')
# 초록
abstract_parts = article.get('Abstract', {}).get('AbstractText', [])
if abstract_parts:
if isinstance(abstract_parts, list):
abstract = ' '.join([str(part) for part in abstract_parts])[:300]
else:
abstract = str(abstract_parts)[:300]
else:
abstract = "(초록 없음)"
print(f"[{idx}] PMID: {pmid}")
print(f"제목: {title}")
print(f"초록: {abstract}...")
print(f"링크: https://pubmed.ncbi.nlm.nih.gov/{pmid}/")
print("-" * 80)
except Exception as e:
print(f"[ERROR] 검색 실패: {e}")
def print_myopathy_spectrum():
"""Statin 근육병증 스펙트럼 설명"""
print("\n\n" + "=" * 80)
print("Statin 근육병증의 스펙트럼 (경증 → 중증)")
print("=" * 80)
spectrum = [
{
"type": "1. Myalgia (근육통)",
"prevalence": "5-10%",
"ck_level": "정상 (Normal)",
"symptoms": "근육 통증, 뻐근함",
"severity": "경증",
"management": "CoQ10, 용량 조절"
},
{
"type": "2. Myopathy (근육병증)",
"prevalence": "0.1-0.5%",
"ck_level": "경도 상승 (<10배)",
"symptoms": "근육 약화, 통증",
"severity": "중등도",
"management": "Statin 변경/중단"
},
{
"type": "3. Rhabdomyolysis (횡문근융해증)",
"prevalence": "0.01%",
"ck_level": "심각한 상승 (>10배, 수천~수만)",
"symptoms": "심한 근육 통증, 갈색 소변, 급성 신부전",
"severity": "중증 (응급)",
"management": "즉시 중단, 입원 치료"
}
]
for item in spectrum:
print(f"\n{item['type']}")
print(f" 발생률: {item['prevalence']}")
print(f" CK 수치: {item['ck_level']}")
print(f" 증상: {item['symptoms']}")
print(f" 심각도: {item['severity']}")
print(f" 관리: {item['management']}")
print("-" * 80)
print("\n\n" + "=" * 80)
print("왜 논문에서 CK를 측정했는가?")
print("=" * 80)
reasons = [
{
"이유": "1. 안전성 확인",
"설명": """
CoQ10 보충이 단순히 '증상을 가리는 것'인지, 아니면 '실제로 근육을
보호하는 것'인지 확인하기 위함.
만약 CK가 계속 상승한다면?
→ 근육 손상이 진행 중이므로 위험
→ 증상만 완화되면 환자가 모르고 계속 복용 → 횡문근융해증 위험
CK가 정상이면?
→ 실제 근육 손상은 없음
→ CoQ10으로 증상만 관리하면 안전
"""
},
{
"이유": "2. 메커니즘 이해",
"설명": """
결과: 증상 개선 (O), CK 변화 없음 (-)
→ 이것이 의미하는 것:
CoQ10은 "근육 재생" 효과가 아님
대신 "미토콘드리아 기능 회복" 효과
Statin 근육통 = 구조적 손상(X), 기능적 문제(O)
"""
},
{
"이유": "3. 객관적 평가",
"설명": """
문제: 근육 통증은 주관적 증상 (placebo 효과 가능)
해결: CK는 객관적 바이오마커
- 환자가 "덜 아프다"고 느낌 (주관적)
- CK 정상 유지 (객관적) → 실제로 안전함을 증명
"""
},
{
"이유": "4. 임상 지침 반영",
"설명": """
미국심장학회(ACC/AHA) Statin 안전성 가이드라인:
【CK 측정 시점】
- 치료 전 베이스라인
- 근육 증상 발생 시
- CK > 정상의 10배 → 즉시 중단
논문에서 CK를 측정한 것은 이 가이드라인을 따른 것
"""
}
]
for item in reasons:
print(f"\n{item['이유']}")
print(item['설명'])
print("-" * 80)
def main():
# 1. Statin 근육병증 스펙트럼 설명
print_myopathy_spectrum()
# 2. 관련 논문 검색
print("\n\n" + "=" * 80)
print("관련 논문 검색 중...")
print("=" * 80)
search_statin_myopathy_spectrum()
# 3. 결론
print("\n\n" + "=" * 80)
print("결론: 논문에서 CK를 측정한 이유")
print("=" * 80)
print("""
1⃣ 안전성: CoQ10이 증상만 가리는 게 아니라 실제로 안전한지 확인
2⃣ 메커니즘: 근육 손상(X), 미토콘드리아 기능 저하(O)임을 증명
3⃣ 객관성: 주관적 증상뿐 아니라 객관적 지표로도 안전함을 입증
4⃣ 임상 적용: 실제 진료 시 CK 검사 없이 CoQ10 권장 가능
→ CK 정상 = "CoQ10 + Statin 병용이 안전하다"는 강력한 근거
""")
if __name__ == '__main__':
main()