File size: 7,759 Bytes
751a827
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
"""
緊急測試修復後的關鍵字提取
"""

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()