|
""" |
|
測試關鍵字匹配邏輯 - 基於實際商品資料 |
|
""" |
|
|
|
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(): |
|
"""測試商品匹配邏輯""" |
|
|
|
|
|
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() |
|
|