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:
212
backend/analyze_statin_myopathy.py
Normal file
212
backend/analyze_statin_myopathy.py
Normal 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()
|
||||
Reference in New Issue
Block a user