linebot_pydantic_fastapi / test_quick_fix.py
mickeywu520's picture
修正查詢
d2d7682
"""
快速測試關鍵字提取修復
"""
def test_keyword_extraction_fix():
"""測試修復後的關鍵字提取"""
def extract_keywords_fixed(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_queries = [
"貓砂還有嗎?",
"請問貓砂還有嗎?"
]
for query in test_queries:
print(f"\n查詢: '{query}'")
keywords, core_words = extract_keywords_fixed(query)
print(f" 核心詞彙: {core_words}")
print(f" 最終關鍵字: {keywords}")
# 檢查是否包含預期的關鍵字
if '貓砂' in keywords and '礦砂' in keywords:
print(" ✅ 包含預期的貓砂相關關鍵字")
else:
print(" ❌ 缺少預期的關鍵字")
def test_search_logic_simulation():
"""模擬搜尋邏輯"""
print(f"\n🔍 模擬搜尋邏輯")
print("=" * 50)
# 實際商品資料
products = [
{
"productName": "美國極冠貓砂 薰衣草12kg",
"productCode": "TL-03",
"stock": 48
},
{
"productName": "Shovel well豪好鏟 破碎型礦砂",
"productCode": "SW-06-01",
"stock": 50
}
]
# 修復後的關鍵字
keywords = ['貓砂', '礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter', '貓']
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):
matched_products.append(product)
print(f"✅ 匹配: {product['productName']} (關鍵字: '{keyword}')")
break
print(f"\n總共匹配 {len(matched_products)} 個商品")
if len(matched_products) >= 2:
print("✅ 修復成功!應該能找到貓砂商品了")
else:
print("❌ 仍有問題需要進一步調試")
def main():
"""主函數"""
print("🚀 快速測試關鍵字提取修復")
print("=" * 60)
test_keyword_extraction_fix()
test_search_logic_simulation()
print("\n" + "=" * 60)
print("✅ 測試完成!")
print("\n💡 修復重點:")
print("1. search_products_advanced 現在使用 _extract_keywords 方法")
print("2. 不再直接使用 query_text.split()")
print("3. 應用 OR 邏輯搜尋條件")
print("4. 重啟服務後應該能正常工作")
if __name__ == "__main__":
main()