import sqlite3 import os from vocab import get_word_info from ai_sentence import generate_sentence from tqdm import tqdm DATA_DIR = "./data" DB_PATH = os.path.join(DATA_DIR, "sentences.db") def init_db(): conn = sqlite3.connect(DB_PATH) c = conn.cursor() c.execute(''' CREATE TABLE IF NOT EXISTS sentences ( word TEXT, phonetic TEXT, sentence TEXT, source TEXT, model TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (word, source, model) ) ''') conn.commit() conn.close() def get_sentences_by_word(word): conn = sqlite3.connect(DB_PATH) c = conn.cursor() c.execute('SELECT word, phonetic, sentence, source, model FROM sentences WHERE word=?', (word,)) results = c.fetchall() conn.close() return results def get_sentence(word): result = get_sentences_by_word(word) if result: return result[0] # 取第一筆資料 return None def save_sentence(word, phonetic, sentence, source, model): conn = sqlite3.connect(DB_PATH) c = conn.cursor() c.execute(''' INSERT INTO sentences (word, phonetic, sentence, source, model) VALUES (?, ?, ?, ?, ?) ON CONFLICT(word, source, model) DO UPDATE SET sentence=excluded.sentence, phonetic=excluded.phonetic ''', (word, phonetic, sentence, source, model)) conn.commit() conn.close() def generate_sentences(words, source, use_ai, model_name): result_display = "" current_status = "" for i, word in enumerate(words): current_status = f"⏳ 處理中:{i + 1}/{len(words)} - [{word}] 正在查詢句子..." word_info = get_word_info(source, word) phonetic = word_info['phonetic'] if word_info else "無" sentence_records = get_sentences_by_word(word) if use_ai or not sentence_records: try: current_status = f"🤖 使用 AI 生成 [{word}] 的句子中... (模型:{model_name})" sentence = generate_sentence(word, model_name) save_sentence(word, phonetic, sentence, 'ai', model_name) source_used = 'ai' model_used = model_name except Exception as e: sentence = f"[AI生成失敗:{e}]" source_used = "error" model_used = None else: sentence = sentence_records[0][2] source_used = sentence_records[0][3] model_used = sentence_records[0][4] result_display += f"""
單字: {word}
音標: {phonetic}
句子: {sentence}
來源: {source_used} {f"({model_used})" if model_used else ""}
""" current_status = "✅ 所有單字處理完成!" return result_display, current_status