linebot_pydantic_fastapi / test_keyword_matching.py
mickeywu520's picture
修復商品查詢功能,解決貓砂等商品無法找到的問題
89879a0
"""
測試關鍵字匹配邏輯 - 基於實際商品資料
"""
def test_keyword_expansion():
"""測試關鍵字擴展邏輯"""
def extract_keywords_with_expansion(query_text: str):
"""擴展版關鍵字提取"""
# 移除常見的查詢詞彙
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋']
# 分割並清理關鍵字
words = query_text.replace('?', '').replace('?', '').split()
keywords = [word for word in words if word not in stop_words and len(word) > 1]
# 擴展相關關鍵字
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 expanded_keywords if expanded_keywords else [query_text.strip()]
print("🔍 測試關鍵字擴展邏輯")
print("=" * 60)
test_queries = [
"你好, 請問有沒有貓砂相關產品?",
"是否有推薦貓砂?",
"有什麼寵物用品?",
"查詢狗糧庫存",
"貓砂還有嗎?"
]
for query in test_queries:
keywords = extract_keywords_with_expansion(query)
print(f"'{query}'")
print(f" → 擴展關鍵字: {keywords}")
print()
def test_product_matching():
"""測試商品匹配邏輯"""
# 實際商品資料(來自您的 Supabase)
products = [
{
"id": 1,
"productCode": "OL1100-1",
"productName": "毆力天然犬種300g 室內成犬無榖小顆粒",
"stock": 100,
"category_id": 1
},
{
"id": 2,
"productCode": "SW-06-01",
"productName": "Shovel well豪好鏟 破碎型礦砂",
"stock": 50,
"category_id": 1
},
{
"id": 3,
"productCode": "TL-03",
"productName": "美國極冠貓砂 薰衣草12kg",
"stock": 48,
"category_id": 1
},
{
"id": 4,
"productCode": "SL11002",
"productName": "首領汪 膠原鴨舌 5入彭湃包",
"stock": 100,
"category_id": 1
}
]
def search_products_simulation(query_text: str):
"""模擬商品搜尋"""
# 擴展關鍵字
def extract_keywords_with_expansion(query_text: str):
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋']
words = query_text.replace('?', '').replace('?', '').split()
keywords = [word for word in words if word not in stop_words and len(word) > 1]
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 expanded_keywords if expanded_keywords else [query_text.strip()]
keywords = extract_keywords_with_expansion(query_text)
matched_products = []
for product in products:
# 檢查是否有任一關鍵字匹配
for keyword in keywords:
if (keyword.lower() in product["productName"].lower() or
keyword.lower() in product["productCode"].lower()):
matched_products.append({
"product": product,
"matched_keyword": keyword
})
break # 找到匹配就跳出
return matched_products, keywords
print("🛍️ 測試商品匹配邏輯")
print("=" * 60)
test_queries = [
"你好, 請問有沒有貓砂相關產品?",
"是否有推薦貓砂?",
"有什麼寵物用品?",
"查詢狗糧庫存",
"礦砂還有嗎?",
"犬種商品"
]
for query in test_queries:
print(f"查詢: '{query}'")
matched_products, keywords = search_products_simulation(query)
print(f"使用關鍵字: {keywords}")
print(f"找到 {len(matched_products)} 個商品:")
for match in matched_products:
product = match["product"]
keyword = match["matched_keyword"]
print(f" ✅ {product['productName']} (匹配關鍵字: '{keyword}', 庫存: {product['stock']})")
if not matched_products:
print(" ❌ 沒有找到匹配的商品")
print("-" * 60)
def test_specific_cat_litter_queries():
"""專門測試貓砂查詢"""
print("\n🐱 專門測試貓砂查詢")
print("=" * 60)
# 貓砂商品
cat_litter_products = [
"Shovel well豪好鏟 破碎型礦砂",
"美國極冠貓砂 薰衣草12kg"
]
# 測試查詢
cat_queries = [
"貓砂",
"礦砂",
"貓",
"litter",
"豪好鏟",
"極冠"
]
print("貓砂相關商品:")
for product in cat_litter_products:
print(f" - {product}")
print(f"\n測試查詢關鍵字:")
for query in cat_queries:
matches = []
for product in cat_litter_products:
if query.lower() in product.lower():
matches.append(product)
print(f" '{query}' → 匹配 {len(matches)} 個商品")
for match in matches:
print(f" ✅ {match}")
def main():
"""主函數"""
print("🚀 開始關鍵字匹配測試\n")
test_keyword_expansion()
test_product_matching()
test_specific_cat_litter_queries()
print("\n" + "=" * 60)
print("✅ 測試完成!")
print("\n💡 分析結果:")
print("1. 關鍵字擴展邏輯應該能找到 '礦砂' 商品")
print("2. '貓砂' 查詢應該匹配到兩個商品")
print("3. 確認搜尋邏輯是否正確運作")
if __name__ == "__main__":
main()