Noms d'entreprise à correspondance floue pour la saisie semi-automatique avec PHP et MySQL
Les utilisateurs importent souvent de longues listes de noms d'entreprise, ce qui peut entraîner des retards avec correspondance directe de chaînes en raison de la taille croissante de la base de données. L'optimisation de ce processus et la fourniture aux utilisateurs de suggestions en temps réel au fur et à mesure qu'ils tapent nécessitent une approche plus efficace.
Fuzzy Matching avec Soundex
Une solution potentielle consiste à indexer l'entreprise noms à l’aide de la fonction SOUNDEX(). Cette fonction convertit les chaînes en représentations phonétiques, regroupant efficacement les noms à consonance similaire. Bien que SOUNDEX soit relativement rapide, il présente des limites :
Distance de Levenshtein pour une correspondance plus avancée
Pour une correspondance floue plus précise, considérez la distance de Levenshtein, qui mesure le nombre de modifications (insertions, suppressions , ou substitutions) nécessaires pour transformer une chaîne en une autre. Cela permet une plus grande flexibilité mais est plus coûteux en termes de calcul.
Combiner des approches pour des résultats optimaux
En fonction de vos besoins spécifiques, vous souhaiterez peut-être utiliser SOUNDEX pour l'auto-initialisation complétez les suggestions et revenez à la distance de Levenshtein pour des matchs plus raffinés. Cette approche hybride offre un équilibre entre vitesse et précision.
Exemple d'utilisation en PHP
// Calculate Soundex code for company names $stmt = $mysqli->prepare("SELECT company_id, SOUNDEX(name) FROM companies"); $stmt->execute(); $result = $stmt->get_result(); // Get user input and convert to Soundex $userInput = "Microsift"; $userInputSoundex = soundex($userInput); // Query for matching company IDs $stmt = $mysqli->prepare("SELECT company_id FROM companies WHERE SOUNDEX(name) = ?"); $stmt->bind_param("s", $userInputSoundex); $stmt->execute(); $result = $stmt->get_result(); // Further refine results using Levenshtein distance (optional) while ($row = $result->fetch_assoc()) { $companyId = $row['company_id']; $levenshteinDistance = levenshtein($userInput, $row['name']); if ($levenshteinDistance < 3) { // Consider as a match } }
En tirant parti de ces techniques, vous pouvez mettre en œuvre un système de correspondance floue très efficace. qui améliore l'expérience utilisateur et optimise les performances de la base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!