Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction Levenshtein pour effectuer une recherche floue? Compétences PHP pour acquérir une correspondance approximative

Comment utiliser la fonction Levenshtein pour effectuer une recherche floue? Compétences PHP pour acquérir une correspondance approximative

gitbox 2025-06-09

Lors de la correspondance et de la recherche de texte, nous avons souvent besoin non seulement de correspondances exactes, mais aussi d'une méthode pour identifier les chaînes qui sont "proches" du texte cible. PHP offre une fonction très pratique Levenshtein , qui peut nous aider à atteindre cet objectif et à effectuer des recherches floues. Aujourd'hui, nous présenterons en détail comment utiliser la fonction Levenshtein pour effectuer une recherche floue et réaliser une correspondance approximative via PHP.

Qu'est-ce que la distance de Levenshtein?

La distance de Levenshtein (également appelée distance d'édition) est un indicateur de la différence entre deux chaînes. Il représente le nombre d'étapes nécessaires pour convertir une chaîne en une autre avec un minimum d'opérations d'édition (insérer, supprimer, remplacer). Plus la distance est petite, plus les deux cordes sont similaires.

Fonction de Levenshtein en php

En PHP, nous pouvons utiliser la fonction de levenshtein pour calculer la distance de Levenshtein entre deux chaînes. Sa syntaxe de base est la suivante:

 levenshtein(string $str1, string $str2, int $cost_ins = 1, int $cost_rep = 1, int $cost_del = 1): int
  • $ STR1 et $ STR2 sont deux chaînes à comparer.

  • $ Cost_ins est le coût de l'insertion des caractères, défautant à 1.

  • $ cost_rep est le coût de remplacement des caractères, défaut à 1.

  • $ cost_del est le coût de la suppression des caractères, défaut à 1.

  • La valeur de retour est la distance de Levenshtein entre deux chaînes.

En calculant la distance de Levenshtein, nous pouvons juger la similitude entre deux cordes. Plus la distance est petite, plus cela signifie similaire.

Recherche floue via la fonction Levenshtein

Dans les applications pratiques, nous fournissons généralement une fonction "recherche floue" lors de la recherche d'un mot-clé. Autrement dit, nous voulons trouver du contenu similaire aux termes de recherche entrés par l'utilisateur, pas seulement à la correspondance exacte.

1. Implémentez la recherche floue de base

Supposons que nous ayons un tableau de chaînes multiples, et maintenant nous devons trouver ces chaînes similaires en fonction des mots clés entrés par l'utilisateur. Nous pouvons calculer la distance de Levenshtein entre chaque chaîne et le terme de recherche en traversant le tableau et sélectionnez les résultats avec des distances plus petites.

 <?php
$searchTerm = 'apple';  // Termes de recherche entrés par les utilisateurs
$items = ['apple pie', 'apple', 'banana', 'grape', 'apricot'];

$threshold = 3;  // Définir un seuil de distance maximal,Plus le plus petit est petit
$results = [];

foreach ($items as $item) {
    $distance = levenshtein($searchTerm, $item);
    if ($distance <= $threshold) {
        $results[] = $item;  // Si la distance est inférieure au seuil,Il est considéré comme un match flou
    }
}

print_r($results);
?>

Dans cet exemple, nous calculons la distance de Levenshtein entre le terme de recherche Apple et chaque élément du tableau. Si la distance est inférieure ou égale au seuil défini (tel que 3 ), l'élément est considéré comme similaire au terme de recherche et ajouté au tableau de résultat.

La sortie peut être:

 Array
(
    [0] => apple pie
    [1] => apple
)

2. Implémentez la recherche floue avec le tri

Parfois, nous devons non seulement trouver toutes les similitudes, mais nous voulons également les trier en fonction de la similitude, en donnant la priorité à ces résultats les plus similaires. Nous pouvons le faire en triant les distances de Levenshtein calculées.

 <?php
$searchTerm = 'apple';  // Termes de recherche entrés par les utilisateurs
$items = ['apple pie', 'apple', 'banana', 'grape', 'apricot'];

$results = [];

foreach ($items as $item) {
    $distance = levenshtein($searchTerm, $item);
    $results[] = ['item' => $item, 'distance' => $distance];
}

// Trier par distance
usort($results, function ($a, $b) {
    return $a['distance'] - $b['distance'];
});

print_r($results);
?>

Dans cet exemple, nous calculons d'abord les distances de Levenshtein de chaque chaîne au terme de recherche, puis les avons mis dans un tableau associatif. Utilisez la fonction USORT pour trier les résultats par distance, et les éléments avec la distance minimale seront classés en premier.

Résultat de sortie:

 Array
(
    [0] => Array
        (
            [item] => apple
            [distance] => 0
        )

    [1] => Array
        (
            [item] => apple pie
            [distance] => 4
        )

    [2] => Array
        (
            [item] => apricot
            [distance] => 5
        )

    [3] => Array
        (
            [item] => banana
            [distance] => 6
        )

    [4] => Array
        (
            [item] => grape
            [distance] => 6
        )
)

Comme vous pouvez le voir, la pomme avec une distance de 0 est classée en premier, suivie de l'élément qui est le plus similaire au terme de recherche.

3. Utilisez l'URL pour interroger

En supposant que nous devons associer quelque chose dans les résultats de recherche à l'URL, nous pouvons intégrer l'URL pertinente directement dans la chaîne. Voici un exemple:

 <?php
$searchTerm = 'apple';  // Termes de recherche entrés par les utilisateurs
$items = ['apple pie', 'apple', 'banana', 'grape', 'apricot'];
$baseUrl = 'http://gitbox.net/search?query=';

$results = [];

foreach ($items as $item) {
    $distance = levenshtein($searchTerm, $item);
    if ($distance <= 3) {
        $results[] = [
            'item' => $item,
            'url'  => $baseUrl . urlencode($item)  // Mettez l&#39;élément correspondant à URL Faire de l&#39;épissage
        ];
    }
}

print_r($results);
?>

Dans cet exemple, les résultats de recherche contiennent non seulement la correspondance elle-même, mais génèrent également une URL pour chaque match, pointant une éventuelle page de recherche.

Exemple de sortie:

 Array
(
    [0] => Array
        (
            [item] => apple pie
            [url] => http://gitbox.net/search?query=apple+pie
        )

    [1] => Array
        (
            [item] => apple
            [url] => http://gitbox.net/search?query=apple
        )
)

Résumer

Avec la fonction Levenshtein , nous pouvons implémenter très facilement la fonction de recherche floue. Qu'il s'agisse d'un match simple ou d'une correspondance triée, la distance de Levenshtein peut nous aider à juger de la similitude entre les chaînes. Sur la base des besoins réels, nous pouvons également associer la correspondance floue aux URL pour optimiser davantage l'expérience de recherche. J'espère que cet article peut vous aider à mieux comprendre et utiliser la fonction de Levenshtein de PHP et améliorer la flexibilité et la précision de votre fonction de recherche.