linebot_pydantic_fastapi / test_fixed_keywords.py
mickeywu520's picture
修正資料庫增強查詢
0254ce4
"""
測試修復後的關鍵字提取邏輯
"""
def test_fixed_keyword_extraction():
"""測試修復後的關鍵字提取"""
def extract_keywords_fixed(query_text: str):
"""修復後的關鍵字提取邏輯"""
# 移除常見的查詢詞彙
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '還有', '?', '?']
# 清理查詢文字
cleaned_text = query_text.replace('?', '').replace('?', '').strip()
# 分割並清理關鍵字
words = cleaned_text.split()
keywords = [word for word in words if word not in stop_words and len(word) > 1]
# 如果沒有有效關鍵字,使用原始文字
if not keywords:
keywords = [cleaned_text]
# 擴展相關關鍵字
expanded_keywords = []
for keyword in 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'])
# 去除重複並返回
return list(set(expanded_keywords))
print("🔧 測試修復後的關鍵字提取邏輯")
print("=" * 50)
test_cases = [
"貓砂還有嗎?",
"是否有推薦貓砂?",
"有什麼寵物用品?",
"查詢狗糧庫存",
"美國極冠",
"礦砂"
]
for query in test_cases:
print(f"\n查詢: '{query}'")
keywords = extract_keywords_fixed(query)
print(f"關鍵字: {keywords}")
def test_product_matching_fixed():
"""測試修復後的商品匹配"""
def extract_keywords_fixed(query_text: str):
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '還有', '?', '?']
cleaned_text = query_text.replace('?', '').replace('?', '').strip()
words = cleaned_text.split()
keywords = [word for word in words if word not in stop_words and len(word) > 1]
if not keywords:
keywords = [cleaned_text]
expanded_keywords = []
for keyword in 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'])
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_query = "貓砂還有嗎?"
print(f"查詢: '{test_query}'")
keywords = extract_keywords_fixed(test_query)
print(f"提取的關鍵字: {keywords}")
matched_products = []
print(f"\n匹配測試:")
for keyword in keywords:
print(f"\n關鍵字: '{keyword}'")
for product in products:
product_name_lower = product["productName"].lower()
product_code_lower = product["productCode"].lower()
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']}")
print(f"\n最終匹配結果:")
print(f"找到 {len(matched_products)} 個商品:")
for product in matched_products:
print(f" - {product['productName']} (庫存: {product['stock']})")
def main():
"""主函數"""
print("🚀 測試關鍵字提取修復")
print("=" * 60)
test_fixed_keyword_extraction()
test_product_matching_fixed()
print("\n" + "=" * 60)
print("✅ 測試完成!")
print("\n💡 修復重點:")
print("1. 將 '還有嗎' 和 '?' 加入 stop_words")
print("2. 正確分割 '貓砂還有嗎' → ['貓砂']")
print("3. 擴展為 ['貓砂', '礦砂', '豆腐砂', ...]")
print("4. 應該能匹配到兩個貓砂商品")
if __name__ == "__main__":
main()