File size: 6,889 Bytes
0254ce4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
"""
測試最終修復版本
"""

def test_final_keyword_extraction():
    """測試最終修復的關鍵字提取"""
    
    def extract_keywords_final(query_text: str):
        """最終修復版的關鍵字提取邏輯"""
        # 移除常見的查詢詞彙
        stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '還有', '嗎']
        
        # 清理查詢文字
        cleaned_text = query_text.replace('?', '').replace('?', '').strip()
        
        # 分割並清理關鍵字
        words = cleaned_text.split()
        keywords = []
        
        for word in words:
            if word not in stop_words and len(word) > 1:
                keywords.append(word)
        
        # 如果沒有有效關鍵字,嘗試從原始文字中提取核心詞彙
        if not keywords:
            # 嘗試提取核心商品詞彙
            core_words = ['貓砂', '狗糧', '寵物', '商品', '產品']
            for core_word in core_words:
                if core_word in cleaned_text:
                    keywords.append(core_word)
                    break
            
            # 如果還是沒有,使用清理後的文字
            if not keywords:
                keywords = [cleaned_text]
        
        # 擴展相關關鍵字
        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 list(set(expanded_keywords))
    
    print("🔧 測試最終修復的關鍵字提取邏輯")
    print("=" * 50)
    
    test_cases = [
        "貓砂還有嗎?",
        "是否有推薦貓砂?",
        "有什麼寵物用品?",
        "查詢狗糧庫存",
        "美國極冠",
        "礦砂"
    ]
    
    for query in test_cases:
        print(f"\n查詢: '{query}'")
        keywords = extract_keywords_final(query)
        print(f"關鍵字: {keywords}")
        
        # 檢查是否包含預期的關鍵字
        if query == "貓砂還有嗎?":
            if '貓砂' in keywords and '礦砂' in keywords:
                print("  ✅ 包含預期的貓砂相關關鍵字")
            else:
                print("  ❌ 缺少預期的關鍵字")

def test_complete_flow():
    """測試完整的查詢流程"""
    
    def extract_keywords_final(query_text: str):
        stop_words = ['推薦', '有沒有', '是否有', '請問', '想要', '需要', '找', '查詢', '搜尋', '還有嗎', '還有', '嗎']
        cleaned_text = query_text.replace('?', '').replace('?', '').strip()
        words = cleaned_text.split()
        keywords = [word for word in words if word not in stop_words and len(word) > 1]
        
        if not keywords:
            core_words = ['貓砂', '狗糧', '寵物', '商品', '產品']
            for core_word in core_words:
                if core_word in cleaned_text:
                    keywords.append(core_word)
                    break
            if not keywords:
                keywords = [cleaned_text]
        
        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 list(set(expanded_keywords))
    
    # 實際商品資料
    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("\n🛍️ 測試完整查詢流程")
    print("=" * 50)
    
    test_query = "貓砂還有嗎?"
    print(f"用戶查詢: '{test_query}'")
    
    # 1. 關鍵字提取
    keywords = extract_keywords_final(test_query)
    print(f"提取關鍵字: {keywords}")
    
    # 2. 商品匹配
    matched_products = []
    
    for product in products:
        if product["is_deleted"]:
            continue
        
        # 檢查是否有任一關鍵字匹配
        for keyword in keywords:
            keyword_lower = keyword.lower()
            product_name_lower = product["productName"].lower()
            product_code_lower = product["productCode"].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
    
    # 3. 格式化回應
    if matched_products:
        response_text = f"為您推薦 {len(matched_products)} 個商品:\n\n"
        for i, product in enumerate(matched_products, 1):
            response_text += f"{i}. {product['productName']}\n"
            response_text += f"   庫存: {product['stock']} - 庫存正常\n"
            response_text += f"   商品編號: {product['productCode']}\n\n"
        
        print(f"\n📝 格式化回應:")
        print(response_text)
        print("✅ 應該能找到商品了!")
    else:
        print("\n❌ 仍然沒有找到商品")

def main():
    """主函數"""
    print("🚀 測試最終修復版本")
    print("=" * 60)
    
    test_final_keyword_extraction()
    test_complete_flow()
    
    print("\n" + "=" * 60)
    print("✅ 測試完成!")
    print("\n💡 修復總結:")
    print("1. 正確處理 '貓砂還有嗎?' → ['貓砂']")
    print("2. 擴展為相關關鍵字: ['貓砂', '礦砂', ...]")
    print("3. 能匹配到兩個貓砂商品")
    print("4. 現在重啟服務應該能正常工作")

if __name__ == "__main__":
    main()