Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh mengoptimumkan pengiraan jarak Levenshtein antara aplikasi PHP dan pangkalan data MySQL?

Bagaimanakah saya boleh mengoptimumkan pengiraan jarak Levenshtein antara aplikasi PHP dan pangkalan data MySQL?

Patricia Arquette
Lepaskan: 2024-12-05 15:34:10
asal
486 orang telah melayarinya

How can I optimize Levenshtein distance calculations between a PHP application and a MySQL database?

Levenshtein dalam MySQL dan PHP: Pendekatan Dioptimumkan

Dalam coretan kod asal, jarak Levenshtein dikira antara perkataan tertentu dan setiap perkataan istilah daripada pangkalan data menggunakan fungsi levenshtein dalam PHP. Walau bagaimanapun, pendekatan ini melibatkan berbilang pertanyaan pangkalan data, yang boleh menjadi tidak cekap untuk set data yang besar. Penyelesaian yang lebih cekap ialah memanfaatkan jarak Levenshtein sebagai penapis dalam pertanyaan pangkalan data itu sendiri.

Untuk mencapai ini, anda memerlukan fungsi Levenshtein yang dilaksanakan dalam MySQL. Sebagai contoh, anda boleh mempertimbangkan fungsi tersuai berikut:

DELIMITER $$
CREATE FUNCTION levenshtein(s1 VARCHAR(255), s2 VARCHAR(255)) RETURNS INT
BEGIN
DECLARE len1 INT DEFAULT LENGTH(s1);
DECLARE len2 INT DEFAULT LENGTH(s2);
DECLARE i, j, cost, d INT DEFAULT 0;

DECLARE sp VARCHAR(255);

IF len1 = 0 THEN
    RETURN len2;
ELSEIF len2 = 0 THEN
    RETURN len1;
ELSE
    SET sp = REPEAT(' ', len1);
    FOR i = 1 TO len1 DO
        SET sp = CONCAT(sp, i);
    END FOR;
    SET sp = CONCAT(sp, CHAR(10));
    FOR j = 1 TO len2 DO
        SET sp = CONCAT(sp, j, CHAR(10));
        SET cost = j;
        FOR i = 1 TO len1 DO
            IF s1 SUBSTRING(i, 1) = s2 SUBSTRING(j, 1) THEN
                SET d = 0;
            ELSE
                SET d = 1;
            END IF;
            SET cost = LEAST(
                cost + 1,
                i + 1 + 1,
                j + d + 1
            );
            SET sp = CONCAT(sp, cost);
        END FOR;
    END FOR;
    SET sp = CONCAT(sp, CHAR(10));
    RETURN SUBSTRING_INDEX(sp, CHAR(10), -1) - len1 - 1;
END IF;
END$$
DELIMITER ;
Salin selepas log masuk

Setelah fungsi Levenshtein ditakrifkan dalam MySQL, anda boleh mengubah suai pertanyaan anda seperti berikut:

$word = mysql_real_escape_string($word);
mysql_qery("SELECT `term` FROM `words` WHERE levenshtein('$word', `term`) BETWEEN 0 AND 4");
Salin selepas log masuk

Pertanyaan ini akan kembali semua istilah daripada jadual perkataan yang mempunyai jarak Levenshtein antara 0 dan 4 kepada perkataan yang ditentukan. Dengan mengelakkan berbilang gelung PHP dan bergantung pada fungsi terbina dalam pangkalan data, anda boleh mencapai peningkatan prestasi yang ketara, terutamanya untuk set data yang besar.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengoptimumkan pengiraan jarak Levenshtein antara aplikasi PHP dan pangkalan data MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan