linebot_pydantic_fastapi / test_emergency_fix.py
mickeywu520's picture
修正進階查詢
751a827
"""
緊急測試修復後的關鍵字提取
"""
def test_emergency_keyword_extraction():
"""測試緊急修復的關鍵字提取"""
def extract_keywords_emergency(query_text: str):
"""緊急修復版的關鍵字提取邏輯"""
# 移除常見的查詢詞彙
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '還有', '嗎', '可以']
# 清理查詢文字
cleaned_text = query_text.replace('?', '').replace('?', '').strip()
# 先嘗試提取核心商品詞彙
core_product_words = ['貓砂', '狗糧', '寵物', '商品', '產品', '貓', '狗', '犬', '礦砂']
extracted_core_words = []
for core_word in core_product_words:
if core_word in cleaned_text:
extracted_core_words.append(core_word)
# 分割並清理關鍵字
words = cleaned_text.split()
keywords = []
for word in words:
if word not in stop_words and len(word) > 1:
keywords.append(word)
# 合併核心詞彙和分割的關鍵字
all_keywords = list(set(extracted_core_words + keywords))
# 如果沒有有效關鍵字,使用清理後的文字
if not all_keywords:
all_keywords = [cleaned_text]
# 擴展相關關鍵字
expanded_keywords = []
for keyword in all_keywords:
expanded_keywords.append(keyword)
# 貓砂相關擴展
if '貓砂' in keyword or '貓' in keyword:
expanded_keywords.extend(['礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter', '貓砂'])
# 狗糧相關擴展
if '狗糧' in keyword or '狗' in keyword:
expanded_keywords.extend(['犬糧', '犬種', '狗食', 'dog'])
# 寵物相關擴展
if '寵物' in keyword:
expanded_keywords.extend(['貓', '狗', '犬', 'pet', 'cat'])
# 商品相關擴展
if '商品' in keyword or '產品' in keyword:
expanded_keywords.extend(['貓砂', '狗糧', '寵物', '食品', '用品'])
# 去除重複並返回
unique_keywords = list(set(expanded_keywords))
return unique_keywords, extracted_core_words
print("🚨 緊急測試關鍵字提取修復")
print("=" * 50)
# 測試實際的用戶查詢
test_cases = [
"請問有商品可以推薦嗎?",
"請問貓砂還有嗎?",
"貓砂還有嗎?",
"推薦一些商品",
"有什麼寵物用品?"
]
for query in test_cases:
print(f"\n查詢: '{query}'")
keywords, core_words = extract_keywords_emergency(query)
print(f" 核心詞彙: {core_words}")
print(f" 最終關鍵字: {keywords}")
# 檢查是否包含預期的關鍵字
if "貓砂" in query:
if '貓砂' in keywords and '礦砂' in keywords:
print(" ✅ 包含預期的貓砂相關關鍵字")
else:
print(" ❌ 缺少預期的貓砂關鍵字")
if "商品" in query:
if any(word in keywords for word in ['商品', '貓砂', '狗糧', '寵物']):
print(" ✅ 包含商品相關關鍵字")
else:
print(" ❌ 缺少商品相關關鍵字")
def test_product_matching_emergency():
"""測試緊急修復的商品匹配"""
def extract_keywords_emergency(query_text: str):
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '還有', '嗎', '可以']
cleaned_text = query_text.replace('?', '').replace('?', '').strip()
core_product_words = ['貓砂', '狗糧', '寵物', '商品', '產品', '貓', '狗', '犬', '礦砂']
extracted_core_words = []
for core_word in core_product_words:
if core_word in cleaned_text:
extracted_core_words.append(core_word)
words = cleaned_text.split()
keywords = [word for word in words if word not in stop_words and len(word) > 1]
all_keywords = list(set(extracted_core_words + keywords))
if not all_keywords:
all_keywords = [cleaned_text]
expanded_keywords = []
for keyword in all_keywords:
expanded_keywords.append(keyword)
if '貓砂' in keyword or '貓' in keyword:
expanded_keywords.extend(['礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter', '貓砂'])
if '狗糧' in keyword or '狗' in keyword:
expanded_keywords.extend(['犬糧', '犬種', '狗食', 'dog'])
if '寵物' in keyword:
expanded_keywords.extend(['貓', '狗', '犬', 'pet', 'cat'])
if '商品' in keyword or '產品' in keyword:
expanded_keywords.extend(['貓砂', '狗糧', '寵物', '食品', '用品'])
return list(set(expanded_keywords))
# 實際商品資料
products = [
{
"id": 1,
"productCode": "OL1100-1",
"productName": "毆力天然犬種300g 室內成犬無榖小顆粒",
"stock": 100
},
{
"id": 2,
"productCode": "SW-06-01",
"productName": "Shovel well豪好鏟 破碎型礦砂",
"stock": 50
},
{
"id": 3,
"productCode": "TL-03",
"productName": "美國極冠貓砂 薰衣草12kg",
"stock": 48
},
{
"id": 4,
"productCode": "SL11002",
"productName": "首領汪 膠原鴨舌 5入彭湃包",
"stock": 100
}
]
print("\n🛍️ 緊急測試商品匹配")
print("=" * 50)
test_queries = [
"請問有商品可以推薦嗎?",
"請問貓砂還有嗎?",
"貓砂還有嗎?"
]
for query in test_queries:
print(f"\n查詢: '{query}'")
keywords = extract_keywords_emergency(query)
print(f"關鍵字: {keywords}")
matched_products = []
for product in products:
product_name_lower = product["productName"].lower()
product_code_lower = product["productCode"].lower()
for keyword in keywords:
keyword_lower = keyword.lower()
if (keyword_lower in product_name_lower or
keyword_lower in product_code_lower):
if product not in matched_products:
matched_products.append(product)
print(f" ✅ 匹配: {product['productName']} (關鍵字: {keyword})")
break
print(f"找到 {len(matched_products)} 個商品")
if not matched_products:
print(" ❌ 沒有找到商品 - 需要進一步調試")
def main():
"""主函數"""
print("🚨 緊急修復測試")
print("=" * 60)
test_emergency_keyword_extraction()
test_product_matching_emergency()
print("\n" + "=" * 60)
print("🔍 診斷結果:")
print("1. 檢查關鍵字提取是否正確")
print("2. 檢查商品匹配邏輯")
print("3. 如果測試通過,重啟服務應該能工作")
if __name__ == "__main__":
main()