Coreference-Bot / app.py
JJS341's picture
Update app.py
44b2ad3 verified
import os
import sys
# 1. 強制下載 Spacy 模型
os.system(f"{sys.executable} -m spacy download en_core_web_sm")
# 2. 解決相容性問題的補丁
try:
import huggingface_hub
if not hasattr(huggingface_hub, 'HfFolder'):
class MockHfFolder:
@staticmethod
def get_token(): return os.getenv("HF_TOKEN")
@staticmethod
def save_token(token): pass
huggingface_hub.HfFolder = MockHfFolder
except:
pass
import gradio as gr
from fastcoref import FCoref
from deep_translator import GoogleTranslator
# 關鍵修正:將 model_name 改為 model_name_or_path
print("🚀 [System] 正在進行阻塞式權重同步(約 300MB)...")
try:
# 使用相容性最高的參數名稱
model = FCoref(model_name_or_path='biu-nlp/f-coref', device='cpu')
print("✅ [System] 模型載入完成,介面即將開啟。")
except TypeError:
# 萬一連上面的都不行,就用最原始的 positional argument
model = FCoref('biu-nlp/f-coref', device='cpu')
print("✅ [System] 使用原始參數模式載入完成。")
def coref_chat(user_input):
if not user_input.strip():
return "請輸入內容", "等待輸入..."
try:
# 1. 偵測語系並統一轉換為英文供模型運算
has_chinese = any('\u4e00' <= char <= '\u9fff' for char in user_input)
if has_chinese:
working_text = GoogleTranslator(source='zh-CN', target='en').translate(user_input)
mode_notice = "【模式:中文 ➔ 英文解析】"
else:
working_text = user_input
mode_notice = "【模式:純英文解析】"
# 2. 執行指代消解
preds = model.predict(texts=[working_text])
clusters = preds[0].get_clusters()
# 3. 整理輸出格式 (嚴格按照你的要求排版)
result = f"✨ {mode_notice}\n"
result += f"📝 英文邏輯空間: {working_text}\n"
# --- 英文翻譯中文 ---
try:
translation_back = GoogleTranslator(source='en', target='zh-TW').translate(working_text)
result += f"📖 英翻中: {translation_back}\n"
except:
result += f"📖 英翻中: (翻譯暫時無法讀取)\n"
result += "---------------------------------\n"
if not clusters:
result += "🔍 分析結果:指代關係明確,或模型判定關聯度未達門檻。"
else:
result += "🎯【偵測到之實體鏈 (Entity Chains)】:\n"
for i, cluster in enumerate(clusters):
cluster_str_en = ' ↔ '.join(cluster)
# 實體鏈個別翻譯
try:
translated_items = [GoogleTranslator(source='en', target='zh-TW').translate(item) for item in cluster]
cluster_str_zh = ' ↔ '.join(translated_items)
except:
cluster_str_zh = "(鏈結翻譯失敗)"
result += f" 🔗 鏈結 {i+1} (繁中): {cluster_str_zh}\n"
result += f" └─ (原文): {cluster_str_en}\n"
return user_input, result
except Exception as e:
return user_input, f"運行錯誤: {str(e)}"
# 介面設定
demo = gr.Interface(
fn=coref_chat,
inputs=gr.Textbox(label="輸入文本", lines=3, placeholder="輸入中文或英文段落..."),
outputs=[gr.Textbox(label="原始輸入"), gr.Textbox(label="AI 語意分析報告")],
title="AI 跨語言指代消解系統 (Stable Version)"
)
if __name__ == "__main__":
demo.launch()