iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
生成式 AI

AI 藥師助手:打造人人都看得懂的藥品查詢系統系列 第 18

Day 18:資料結構優化 – 打造乾淨的藥品資料表

  • 分享至 

  • xImage
  •  

前言

做到第 18 天,我發現我的專案已經累積了不少資訊來源:

  • Day 9 爬到的官方藥品資料

  • Day 10 的 AI 白話翻譯

  • Day 12 的多國語言版本

  • Day 16 的智慧藥品資料庫雛形

這些資料雖然能用,但分散在不同格式(JSON、字串、即時生成)中,一旦要做 FAQ 或藥品比較,就會顯得雜亂無章。

所以今天的重點就是:資料結構優化

我決定在 SQLite 中建立一個乾淨的 drugs 資料表,欄位設計包括:藥品名稱、成分、用途、副作用、注意事項,還有一個 translations 欄位專門存多國語言的 JSON。

建立資料表 drugs

import sqlite3
import json

# 建立/連線到 SQLite 資料庫
conn = sqlite3.connect("medicine.db")
cursor = conn.cursor()

# 建立藥品資料表
cursor.execute("""
CREATE TABLE IF NOT EXISTS drugs (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    drug_name TEXT UNIQUE,
    ingredients TEXT,
    uses TEXT,
    side_effects TEXT,
    warnings TEXT,
    translations TEXT
);
""")

conn.commit()
print("資料表建立完成!")

插入測試資料(範例:普拿疼)

# 假設這是 Day 9 ~ Day 12 拿到的整理資料
drug_data = {
    "drug_name": "普拿疼",
    "ingredients": "Acetaminophen 500mg",
    "uses": "緩解輕至中度疼痛,如頭痛、牙痛、肌肉痛、經痛",
    "side_effects": "肝功能異常、皮疹、噁心、過量服用可能導致肝毒性",
    "warnings": "避免與酒精同時使用,避免長期大量服用",
    "translations": json.dumps({
        "en": {
            "name": "Panadol",
            "uses": "Relieves mild to moderate pain such as headache, toothache, muscle pain, menstrual pain",
            "warnings": "Avoid alcohol, do not take in large amounts for a long time"
        },
        "jp": {
            "name": "パナドール",
            "uses": "頭痛、歯痛、筋肉痛、生理痛の緩和",
            "warnings": "アルコールと併用しないでください"
        }
    }, ensure_ascii=False)
}

# 插入資料
cursor.execute("""
INSERT OR REPLACE INTO drugs (drug_name, ingredients, uses, side_effects, warnings, translations)
VALUES (:drug_name, :ingredients, :uses, :side_effects, :warnings, :translations)
""", drug_data)

conn.commit()
print("藥品資料已插入!")

查詢藥品資料

# 查詢普拿疼資料
cursor.execute("SELECT * FROM drugs WHERE drug_name=?", ("普拿疼",))
result = cursor.fetchone()

print("\n 查詢結果:")
print(f"ID: {result[0]}")
print(f"藥品名稱: {result[1]}")
print(f"成分: {result[2]}")
print(f"用途: {result[3]}")
print(f"副作用: {result[4]}")
print(f"注意事項: {result[5]}")
t(f"翻譯: {result[6]}")
conn.close()

上一篇
Day 17:藥品資訊分類標籤 – 讓查詢更有系統
下一篇
Day 19:新增常見問與答模組
系列文
AI 藥師助手:打造人人都看得懂的藥品查詢系統22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言