|
""" |
|
測試調試日誌是否正常工作 |
|
""" |
|
|
|
import logging |
|
|
|
|
|
logging.basicConfig( |
|
level=logging.INFO, |
|
format='%(levelname)s:%(name)s:%(message)s' |
|
) |
|
|
|
def test_keyword_extraction_with_logs(): |
|
"""測試關鍵字提取並顯示日誌""" |
|
|
|
def extract_keywords_with_logs(query_text: str): |
|
"""帶日誌的關鍵字提取""" |
|
logger = logging.getLogger("test_keyword_extraction") |
|
|
|
|
|
stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '還有', '嗎', '可以'] |
|
|
|
|
|
cleaned_text = query_text.replace('?', '').replace('?', '').strip() |
|
logger.info(f"清理後的文字: '{cleaned_text}'") |
|
|
|
|
|
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) |
|
|
|
logger.info(f"提取的核心詞彙: {extracted_core_words}") |
|
|
|
|
|
words = cleaned_text.split() |
|
keywords = [] |
|
|
|
for word in words: |
|
if word not in stop_words and len(word) > 1: |
|
keywords.append(word) |
|
|
|
logger.info(f"分割後的關鍵字: {keywords}") |
|
|
|
|
|
all_keywords = list(set(extracted_core_words + keywords)) |
|
logger.info(f"合併後的關鍵字: {all_keywords}") |
|
|
|
|
|
if not all_keywords: |
|
all_keywords = [cleaned_text] |
|
logger.warning(f"沒有有效關鍵字,使用原始文字: {all_keywords}") |
|
|
|
|
|
expanded_keywords = [] |
|
for keyword in all_keywords: |
|
expanded_keywords.append(keyword) |
|
|
|
|
|
if '貓砂' in keyword or '貓' in keyword: |
|
expanded_keywords.extend(['礦砂', '豆腐砂', '水晶砂', '木屑砂', 'litter', '貓砂']) |
|
logger.info(f"貓砂相關擴展: {keyword} → 添加貓砂相關詞彙") |
|
|
|
|
|
if '狗糧' in keyword or '狗' in keyword: |
|
expanded_keywords.extend(['犬糧', '犬種', '狗食', 'dog']) |
|
logger.info(f"狗糧相關擴展: {keyword} → 添加狗糧相關詞彙") |
|
|
|
|
|
if '寵物' in keyword: |
|
expanded_keywords.extend(['貓', '狗', '犬', 'pet', 'cat']) |
|
logger.info(f"寵物相關擴展: {keyword} → 添加寵物相關詞彙") |
|
|
|
|
|
if '商品' in keyword or '產品' in keyword: |
|
expanded_keywords.extend(['貓砂', '狗糧', '寵物', '食品', '用品']) |
|
logger.info(f"商品相關擴展: {keyword} → 添加商品相關詞彙") |
|
|
|
|
|
unique_keywords = list(set(expanded_keywords)) |
|
|
|
|
|
logger.info(f"關鍵字提取: '{query_text}' → 核心詞: {extracted_core_words} → 最終: {unique_keywords}") |
|
|
|
return unique_keywords, extracted_core_words |
|
|
|
print("🔍 測試關鍵字提取日誌") |
|
print("=" * 50) |
|
|
|
test_queries = [ |
|
"請問貓砂還有嗎?", |
|
"貓砂還有嗎?", |
|
"請問有商品可以推薦嗎?" |
|
] |
|
|
|
for query in test_queries: |
|
print(f"\n測試查詢: '{query}'") |
|
print("-" * 30) |
|
keywords, core_words = extract_keywords_with_logs(query) |
|
print(f"最終結果: {keywords}") |
|
|
|
def test_product_matching_simulation(): |
|
"""模擬商品匹配過程""" |
|
|
|
logger = logging.getLogger("test_product_matching") |
|
|
|
|
|
products = [ |
|
{ |
|
"id": 2, |
|
"productCode": "SW-06-01", |
|
"productName": "Shovel well豪好鏟 破碎型礦砂", |
|
"stock": 50, |
|
"is_deleted": False |
|
}, |
|
{ |
|
"id": 3, |
|
"productCode": "TL-03", |
|
"productName": "美國極冠貓砂 薰衣草12kg", |
|
"stock": 48, |
|
"is_deleted": False |
|
} |
|
] |
|
|
|
print(f"\n🛍️ 測試商品匹配模擬") |
|
print("=" * 50) |
|
|
|
test_query = "貓砂還有嗎?" |
|
logger.info(f"開始商品匹配測試: '{test_query}'") |
|
|
|
|
|
keywords = ['貓', '水晶砂', '貓砂', '豆腐砂', 'litter', '木屑砂', '礦砂', '貓砂還有嗎'] |
|
logger.info(f"使用關鍵字: {keywords}") |
|
|
|
|
|
matched_products = [] |
|
|
|
for product in products: |
|
if product["is_deleted"]: |
|
continue |
|
|
|
|
|
matched_keywords = [] |
|
for keyword in keywords: |
|
if (keyword.lower() in product["productName"].lower() or |
|
keyword.lower() in product["productCode"].lower()): |
|
matched_keywords.append(keyword) |
|
|
|
if matched_keywords: |
|
matched_products.append(product) |
|
logger.info(f"📦 商品: {product['productName']} - 匹配關鍵字: {matched_keywords}") |
|
|
|
logger.info(f"✅ 匹配完成,找到 {len(matched_products)} 個商品") |
|
|
|
print(f"匹配結果: 找到 {len(matched_products)} 個商品") |
|
for product in matched_products: |
|
print(f" - {product['productName']}") |
|
|
|
def main(): |
|
"""主函數""" |
|
print("🚀 測試調試日誌功能") |
|
print("=" * 60) |
|
|
|
test_keyword_extraction_with_logs() |
|
test_product_matching_simulation() |
|
|
|
print("\n" + "=" * 60) |
|
print("✅ 日誌測試完成!") |
|
print("\n💡 現在重啟服務,應該能看到詳細的調試日誌") |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|