Blog
یافت نشد
چیزی که دنبال آن بودید اینجا پیدا نشد؟
چیزی در اینجا پیدا نشد. شاید جستجو بتوانید به شما کمک کند؟
/** * جستجوی هوشمند صوتی (Voice Search) * این متد متن گفتاری را دریافت کرده و به پارامترهای جستجو تبدیل میکند. */ public function search_by_voice($voice_text, $extra_params = []) { $voice_text = sanitize_text_field(trim($voice_text)); if (empty($voice_text)) { return []; } // اعمال فیلتر برای اتصال به AI (در آینده) $parsed = apply_filters('vfe_voice_parse_query', null, $voice_text); if (is_null($parsed) || !is_array($parsed)) { $parsed = $this->parse_voice_text_advanced($voice_text); } // اگر هیچ پارامتر مفیدی پیدا نشد، خالی برگردان if (empty($parsed['make']) && empty($parsed['model']) && empty($parsed['engine_code']) && empty($parsed['chassis']) && empty($parsed['year'])) { return []; } // ترکیب با پارامترهای اضافی $search_params = wp_parse_args($parsed, $extra_params); unset($search_params['raw_voice_text']); // اجرای جستجوی پیشرفته return $this->search_advanced($search_params); } /** * مفسر پیشرفته برای متن گفتاری (بدون نیاز به AI) * این تابع بهطور هوشمند برند، مدل، سال، کد موتور و شاسی را از متن استخراج میکند. */ private function parse_voice_text_advanced($text) { global $wpdb; $parsed = [ 'make' => '', 'model' => '', 'year' => '', 'engine_code' => '', 'chassis' => '', 'raw_voice_text' => $text ]; // 1️⃣ استخراج سال (۴ رقم) if (preg_match('/\b(19|20)\d{2}\b/', $text, $matches)) { $parsed['year'] = $matches[0]; } // 2️⃣ استخراج کد موتور (مثل 2AZ-FE, 1NZ-FE, M20A-FKS) if (preg_match('/\b([A-Z0-9]{1,3}-[A-Z]{1,3})\b/', $text, $matches)) { $parsed['engine_code'] = $matches[1]; } elseif (preg_match('/\b([A-Z0-9]{2,4}-?[A-Z]{1,3})\b/', $text, $matches)) { $parsed['engine_code'] = $matches[1]; } // 3️⃣ استخراج کد شاسی (مثل MCV30, ZRE152, LK201) if (preg_match('/\b([A-Z]{2,4}[0-9]{2,4})\b/', $text, $matches)) { $parsed['chassis'] = $matches[1]; } // 4️⃣ استخراج برند (با تطابق با دیتابیس) $makes = wp_cache_get('vfe_all_makes', 'vfe'); if (false === $makes) { $makes = $wpdb->get_col("SELECT DISTINCT make FROM {$wpdb->prefix}vfe_vehicles ORDER BY make"); wp_cache_set('vfe_all_makes', $makes, 'vfe', HOUR_IN_SECONDS); } // ابتدا برندهای چندکلمهای را بررسی میکنیم (مثل "Land Rover") foreach ($makes as $make) { if (stripos($text, $make) !== false && strlen($make) > 3) { $parsed['make'] = $make; break; } } // اگر پیدا نشد، برندهای کوتاهتر را بررسی کن if (empty($parsed['make'])) { foreach ($makes as $make) { if (stripos($text, $make) !== false) { $parsed['make'] = $make; break; } } } // 5️⃣ استخراج مدل (با حذف موارد پیدا شده) $cleaned = $text; if (!empty($parsed['make'])) { $cleaned = str_ireplace($parsed['make'], '', $cleaned); } if (!empty($parsed['year'])) { $cleaned = str_ireplace($parsed['year'], '', $cleaned); } if (!empty($parsed['engine_code'])) { $cleaned = str_ireplace($parsed['engine_code'], '', $cleaned); } if (!empty($parsed['chassis'])) { $cleaned = str_ireplace($parsed['chassis'], '', $cleaned); } $cleaned = trim(preg_replace('/\s+/', ' ', $cleaned)); $cleaned = trim(preg_replace('/[،،;]+/', '', $cleaned)); // اگر مدل در دیتابیس موجود باشد، از آن استفاده کن if (!empty($cleaned) && strlen($cleaned) > 1) { // ابتدا مدلهای موجود در دیتابیس را بررسی کن $models = wp_cache_get('vfe_all_models', 'vfe'); if (false === $models) { $models = $wpdb->get_col("SELECT DISTINCT model FROM {$wpdb->prefix}vfe_vehicles ORDER BY model"); wp_cache_set('vfe_all_models', $models, 'vfe', HOUR_IN_SECONDS); } $found_model = ''; foreach ($models as $model) { if (stripos($cleaned, $model) !== false) { $found_model = $model; break; } } if (!empty($found_model)) { $parsed['model'] = $found_model; } else { // اگر مدل در دیتابیس نبود، همان عبارت باقیمانده را بهعنوان مدل در نظر بگیر $parsed['model'] = $cleaned; } } // 6️⃣ اگر برند پیدا نشد ولی مدل پیدا شد، سعی کن برند را از مدل استخراج کنی if (empty($parsed['make']) && !empty($parsed['model'])) { foreach ($makes as $make) { if (stripos($parsed['model'], $make) !== false) { $parsed['make'] = $make; $parsed['model'] = trim(str_ireplace($make, '', $parsed['model'])); break; } } } return $parsed; } } }
چیزی در اینجا پیدا نشد. شاید جستجو بتوانید به شما کمک کند؟