日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 比较字符串或文章的相似度

發布時間:2025/3/15 php 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 比较字符串或文章的相似度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是轉載的,不知道多少年前的文章,有些對于現在版本的PHP會出現相反的結果,使用的同學要自己去驗證哦
php默認有個函數similar_text()用于計算字符串之間的相似度,該函數也可以計算兩個字符串的相似度(以百分比計)。不過這個函數感覺對中文計算很不準確比如:

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

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

<?php class LCS {var $str1;var $str2;var $c = array();/*返回串一和串二的最長公共子序列 */function getLCS($str1, $str2, $len1 = 0, $len2 = 0) {$this->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);}/*返回兩個串的相似度 */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(); //返回最長公共子序列 $lcs->getLCS("hello word","hello china"); //返回相似度 echo $lcs->getSimilar("吉林禽業公司火災已致112人遇難","吉林寶源豐禽業公司火災已致112人遇難");

同樣輸出結果為:0.90322580645161,明顯準確的多。

來自:http://www.fkblog.org/blog1297

總結

以上是生活随笔為你收集整理的php 比较字符串或文章的相似度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。