Home Backend Development PHP Tutorial Principle of PHP function similar_text()_PHP Tutorial

Principle of PHP function similar_text()_PHP Tutorial

Jul 13, 2016 am 10:27 AM
php text function principle string Every time of resemblance calculate

PHP has a function similar_text() that calculates the similarity of two strings. It can get a percentage to express the similarity of the two strings. The effect is as follows:

similar_text('aaaa', 'aaaa', $percent);

var_dump($percent);

//float(100)

similar_text('aaaa', 'aaaabbbb', $percent);

var_dump($percent);

//float(66.666666666667)

similar_text('abcdef', 'aabcdefg', $percent);

var_dump($percent);

//float(85.714285714286)

Using this function, you can use it to perform fuzzy search functions, or other functions that require fuzzy matching. Recently, I have involved this function in the feature matching step in the research on verification code recognition.

But what kind of algorithm does this function use? I studied its underlying implementation and summarized it in three steps:

(1) Find the longest segment with the same part in the two strings;

(2) Use the same method to find the longest segment with the same parts in the remaining two paragraphs, and so on until there are no more identical parts;

 (3) Similarity = the sum of the lengths of all the same parts * 2 / the sum of the lengths of the two strings;

The source code version I studied is PHP 5.4.6, and the relevant code is located in lines 2951~3031 of the file php-5.4.6/ext/standard/string.c. The following is the source code after I added comments.

//Find the longest segment with the same part in the two strings

static void php_similar_str(const char *txt1, int len1, const char *txt2, int len2, int *pos1, int *pos2, int *max)

 {

Char *p, *q;

Char *end1 = (char *) txt1 + len1;

Char *end2 = (char *) txt2 + len2;

int l;

*max = 0;

//Start traversing based on the first string

 for (p = (char *) txt1; p < end1; p++) {

//Traverse the second string

 for (q = (char *) txt2; q < end2; q++) {

// Found that there are the same characters, continue to loop through the search, l is the length of the same part

 for (l = 0; (p + l < end1) && (q + l < end2) && (p[l] == q[l]); l++);

//Bubble method to find the longest l and remember the starting position of the same part

 if (l > *max) {

*max = l;

 *pos1 = p - txt1;

 *pos2 = q - txt2;

 }

 }

 }

 }

// Calculate the total length of the same parts of the two strings

static int php_similar_char(const char *txt1, int len1, const char *txt2, int len2)

 {

int sum;

 int pos1, pos2, max;

//Find the longest segment of the same part between two strings

 php_similar_str(txt1, len1, txt2, len2, &pos1, &pos2, &max);

//Here is the initial assignment to sum and the judgment of the max value

//If max is zero, it means that the two strings do not have any same characters, and if

will jump out

 if ((sum = max)) {

//Recurse for the first half of the segment, and the length of the same segment is accumulated

 if (pos1 && pos2) {

sum += php_similar_char(txt1, pos1,

 txt2, pos2);

 }

//Recurse for the second half of the segment, and the length of the same segment is accumulated

 if ((pos1 + max < len1) && (pos2 + max < len2)) {

sum += php_similar_char(txt1 + pos1 + max, len1 - pos1 - max,

 txt2 + pos2 + max, len2 - pos2 - max);

 }

 }

return sum;

 }

 //PHP function definition

PHP_FUNCTION(similar_text)

 {

Char *t1, *t2;

zval **percent = NULL;

int ac = ZEND_NUM_ARGS();

int sim;

 int t1_len, t2_len;

// Check parameter validity

 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|Z", &t1, &t1_len, &t2, &t2_len, &percent) == FAILURE) {

return;

 }

//If there is a third parameter

 if (ac > 2) {

convert_to_double_ex(percent);

 }

//If the length of both strings is 0, return 0

 if (t1_len + t2_len == 0) {

 if (ac > 2) {

 Z_DVAL_PP(percent) = 0;

 }

RETURN_LONG(0);

 }

//Call the above function to calculate the similarity library of two strings

 sim = php_similar_char(t1, t1_len, t2, t2_len);

//You can see the calculation formula of the third parameter percent

 if (ac > 2) {

Z_DVAL_PP(percent) = sim * 200.0 / (t1_len + t2_len);

 }

RETURN_LONG(sim);

 }

In addition, PHP also provides another function levenshtein() for calculating string similarity. It expresses string similarity by calculating the edit distance of two strings. This is also a very common algorithm. The performance of levenshtein() is better than similar_text(), because from the previous code analysis, we can see that the complexity of similar_text() is O(n^3), n represents the length of the longest string, and levenshtein() The complexity is O(m*n), m and n are the lengths of the two strings respectively.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/815793.htmlTechArticlePHP has a function similar_text() that calculates the similarity of two strings. It can calculate a percentage to represent the two strings. The degree of similarity between strings. The effect is as follows: similar_text('aaaa', 'aaaa', $...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

PHP and Python: Comparing Two Popular Programming Languages PHP and Python: Comparing Two Popular Programming Languages Apr 14, 2025 am 12:13 AM

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

See all articles