Maison >base de données >tutoriel mysql >Comment puis-je implémenter une correspondance floue efficace pour les noms d'entreprise en PHP et MySQL ?

Comment puis-je implémenter une correspondance floue efficace pour les noms d'entreprise en PHP et MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-06 02:56:09615parcourir

How Can I Implement Efficient Fuzzy Matching for Company Names in PHP and MySQL?

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 :

  • Il met l'accent sur les premiers caractères, ce qui peut conduire à de fausses correspondances pour les chaînes plus longues.
  • Il nécessite que la première lettre des noms soit être identique, ce qui limite sa précision pour les entreprises avec des caractères initiaux différents.
  • Il peut ne pas fonctionner correctement avec des caractères non latins. caractères.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn