<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • PHP中計(jì)算字符串相似度函數(shù)代碼

    時(shí)間:2024-10-30 03:23:17 PHP 我要投稿
    • 相關(guān)推薦

    PHP中計(jì)算字符串相似度函數(shù)代碼

      similar_text — 計(jì)算兩個(gè)字符串的相似度

      int similar_text ( string $first , string $second [, float &$percent ] )

      $first 必需。規(guī)定要比較的第一個(gè)字符串。

      $second 必需。規(guī)定要比較的第二個(gè)字符串。

      $percent 可選。規(guī)定供存儲(chǔ)百分比相似度的變量名。

      兩個(gè)字符串的相似程度計(jì)算依據(jù) Oliver [1993] 的描述進(jìn)行。注意該實(shí)現(xiàn)沒有使用 Oliver 虛擬碼中的堆棧,但是卻進(jìn)行了遞歸調(diào)用,這個(gè)做法可能會(huì)導(dǎo)致整個(gè)過程變慢或變快。也請(qǐng)注意,該算法的復(fù)雜度是 O(N**3),N 是最長(zhǎng)字符串的長(zhǎng)度。

      比如我們想找字符串a(chǎn)bcdefg和字符串a(chǎn)eg的相似度:

      復(fù)制代碼 代碼如下:

      $first = "abcdefg";

      $second = "aeg";

      echo similar_text($first, $second);結(jié)果輸出3.如果想以百分比顯示,則可使用它的第三個(gè)參數(shù),如下:

      $first = "abcdefg";

      $second = "aeg";

      similar_text($first, $second, $percent);

      echo $percent;

      similar_text函數(shù)的使用及實(shí)現(xiàn)過程。similar_text() 函數(shù)主要是用來計(jì)算兩個(gè)字符串的匹配字符的數(shù)目,也可以計(jì)算兩個(gè)字符串的相似度(以百分比計(jì))。與 similar_text() 函數(shù)相比,我們今天要介紹的 levenshtein() 函數(shù)更快。不過,similar_text() 函數(shù)能通過更少的必需修改次數(shù)提供更精確的結(jié)果。在追求速度而少精確度,并且字符串長(zhǎng)度有限時(shí)可以考慮使用 levenshtein() 函數(shù)。

      使用說明

      先看手冊(cè)上 levenshtein() 函數(shù)的說明:

      levenshtein() 函數(shù)返回兩個(gè)字符串之間的 Levenshtein 距離。

      Levenshtein 距離,又稱編輯距離,指的是兩個(gè)字符串之間,由一個(gè)轉(zhuǎn)換成另一個(gè)所需的最少編輯操作次數(shù)。許可的編輯操作包括將一個(gè)字符替換成另一個(gè)字符,插入一個(gè)字符,刪除一個(gè)字符。

      例如把 kitten 轉(zhuǎn)換為 sitting:

      sitten (k→s)

      sittin (e→i)

      sitting (→g)levenshtein() 函數(shù)給每個(gè)操作(替換、插入和刪除)相同的權(quán)重。不過,您可以通過設(shè)置可選的 、replace、 參數(shù),來定義每個(gè)操作的代價(jià)。

      語法:

      levenshtein(string1,string2,,replace,)

      參數(shù) 描述

      string1 必需。要對(duì)比的第一個(gè)字符串。

      string2 必需。要對(duì)比的第二個(gè)字符串。

       可選。插入一個(gè)字符的代價(jià)。默認(rèn)是 1。

      replace 可選。替換一個(gè)字符的代價(jià)。默認(rèn)是 1。

       可選。刪除一個(gè)字符的代價(jià)。默認(rèn)是 1。

      提示和注釋

      如果其中一個(gè)字符串超過 255 個(gè)字符,levenshtein() 函數(shù)返回 -1。

      levenshtein() 函數(shù)對(duì)大小寫不敏感。

      levenshtein() 函數(shù)比 similar_text() 函數(shù)更快。不過,similar_text() 函數(shù)提供需要更少修改的更精確的結(jié)果。

      例子

      復(fù)制代碼 代碼如下:

      <?php

      echo levenshtein("Hello World","ello World");

      echo "
    ";

      echo levenshtein("Hello World","ello World",10,20,30);

      ?>

      輸出: 1 30

      以下是補(bǔ)充:

      php默認(rèn)有個(gè)函數(shù)similar_text()用于計(jì)算字符串之間的相似度,該函數(shù)也可以計(jì)算兩個(gè)字符串的相似度(以百分比計(jì))。不過這個(gè)函數(shù)感覺對(duì)中文計(jì)算很不準(zhǔn)確比如:

      復(fù)制代碼 代碼如下:

      echo similar_text("吉林禽業(yè)公司火災(zāi)已致112人遇難","吉林寶源豐禽業(yè)公司火災(zāi)已致112人遇難");

      這兩個(gè)新聞標(biāo)題其實(shí)都是一樣的,如果使用similar_text()相似對(duì)結(jié)果為:42,即只相似42%,所以這個(gè)感覺很不靠譜,今天剛好收集到一段PHP代碼也是用于比較兩個(gè)字符串的相似度,直接貼出代碼:

      str1 = $str1; $this->str2 = $str2; if ($len1 == 0) $len1 = strlen($str1); if ($len2 == 0) $len2 = strlen($str2); $this->initC($len1, $len2); return $this->printLCS($this->c, $len1 - 1, $len2 - 1); } /*返回兩個(gè)串的相似度*/ function getSimilar($str1, $str2) { $len1 = strlen($str1); $len2 = strlen($str2); $len = strlen($this->getLCS($str1, $str2, $len1, $len2)); return $len * 2 / ($len1 + $len2); } function initC($len1, $len2) { for ($i = 0; $i < $len1; $i++) $this->c[$i][0] = 0; for ($j = 0; $j < $len2; $j++) $this->c[0][$j] = 0; for ($i = 1; $i < $len1; $i++) { for ($j = 1; $j < $len2; $j++) { if ($this->str1[$i] == $this->str2[$j]) { $this->c[$i][$j] = $this->c[$i - 1][$j - 1] + 1; } else if ($this->c[$i - 1][$j] >= $this->c[$i][$j - 1]) { $this->c[$i][$j] = $this->c[$i - 1][$j]; } else { $this->c[$i][$j] = $this->c[$i][$j - 1]; } } } } function printLCS($c, $i, $j) { if ($i == 0 || $j == 0) { if ($this->str1[$i] == $this->str2[$j]) return $this->str2[$j]; else return ""; } if ($this->str1[$i] == $this->str2[$j]) { return $this->printLCS($this->c, $i - 1, $j - 1).$this->str2[$j]; } else if ($this->c[$i - 1][$j] >= $this->c[$i][$j - 1]) { return $this->printLCS($this->c, $i - 1, $j); } else { return $this->printLCS($this->c, $i, $j - 1); } }} $lcs = new LCS();//返回最長(zhǎng)公共子序列$lcs->getLCS("hello word","hello china");//返回相似度echo $lcs->getSimilar("吉林禽業(yè)公司火災(zāi)已致112人遇難","吉林寶源豐禽業(yè)公司火災(zāi)已致112人遇難");

      同樣輸出結(jié)果為:0.90322580645161,明顯準(zhǔn)確的多。

    【PHP中計(jì)算字符串相似度函數(shù)代碼】相關(guān)文章:

    php字符串處理函數(shù)大全08-21

    php對(duì)圖像的各種處理函數(shù)代碼總結(jié)07-03

    PHP url 加密解密函數(shù)代碼方法10-25

    關(guān)于php中的一個(gè)中文字符串截取函數(shù)07-15

    php數(shù)組函數(shù)序列之a(chǎn)rray-combine() - 數(shù)組合并函數(shù)的代碼08-25

    PHP中函數(shù)的使用說明09-01

    PHP中的排序函數(shù)區(qū)別分析08-23

    關(guān)于PHP var-dump遍歷對(duì)象屬性的函數(shù)與應(yīng)用代碼06-21

    PHP的壓縮函數(shù)06-21

    淺析php函數(shù)的實(shí)例06-08

    主站蜘蛛池模板: 国产精品va无码一区二区| 97精品久久天干天天天按摩| 精品人妻无码一区二区色欲产成人| 日韩欧美精品不卡| 久久精品人人做人人妻人人玩| 国产欧美日韩精品专区| 91国在线啪精品一区| 亚洲日韩欧美制服精品二区 | 久久丫精品国产亚洲av不卡| 精品91自产拍在线观看| 久久99精品国产99久久6男男| 亚洲动漫精品无码av天堂 | 色欲久久久天天天综合网精品| 国产亚洲精品自在线观看| 精品乱人伦一区二区三区| 久久精品中文闷骚内射| 亚洲av无码成人精品国产| 国产一区麻豆剧传媒果冻精品| 亚洲国产精品线在线观看| 国产精品久久免费| 国产国产精品人在线视| 亚洲av永久无码精品漫画| 欧美在线精品一区二区三区| 国产精品无码专区在线观看| 91精品国产麻豆国产自产在线| 精品久久久久久综合日本| 国产精品天天影视久久综合网| 国内精品人妻无码久久久影院| 亚洲人成精品久久久久| 亚洲人午夜射精精品日韩| 亚洲欧美精品丝袜一区二区| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲精品亚洲人成在线观看下载 | 国产精品内射后入合集| 久久亚洲私人国产精品vA | 亚洲国产美女精品久久久久∴| 自拍偷自拍亚洲精品情侣| 亚洲麻豆精品国偷自产在线91 | 亚洲综合精品网站| 一本大道无码日韩精品影视| 亚洲欧美日韩精品久久亚洲区|