|
""" |
|
緊急測試修復後的關鍵字提取 |
|
""" |
|
|
|
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() |
|
|