字符串相似度比较

假如我们有这样的需求,要对某篇文章的相关内容的列表,在跟文章标题进行相似度排序,于是想了又想,写了一个小算法,可以根据关键字相似度对数组某个字段进行排序。怎么办呢?


一.数组

$data = [

[

'id'=>1,

'title'=>'YzmCMS内容管理系统',

],

[

'id'=>2,

'title'=>'开源CMS',

],

[

'id'=>3,

'title'=>'YzmCMS轻量级开源内容管理系统',

],

[

'id'=>4,

'title'=>'内容管理系统',

],

[

'id'=>5,

'title'=>'免费内容管理系统',

],

[

'id'=>6,

'title'=>'YzmCMS开源CMS',

],

[

'id'=>7,

'title'=>'免费CMS',

],

[

'id'=>8,

'title'=>'轻量级开源CMS',

],

[

'id'=>9,

'title'=>'YzmCMS建站CMS',

],

[

'id'=>10,

'title'=>'免费开源CMS',

],

];

二.处理

/** * 根据关键字对数组字段进行相似度排序 *@param$array   原数组 *@param$keyword 关键字 *@param$arr_key 要匹配的数组字段名 *@returnarray    排序好的数组 */functionsimilar_arr($array, $keyword, $arr_key ='title'){

    //数组key小于3,直接返回,不符合排序要求(特例,可不写) if(count($array)<= 3){

return $array;

}

    //数组相似度处理 foreach ($array as $key => $value) {

similar_text($value[$arr_key], $keyword, $percent);

$value['percent'] = $percent;

$data[] = $value;

}

//取出数组中percent的一列,返回一维数组 $percent =  array_column($data, 'percent'); 

//排序,根据 percent 排序 array_multisort($percent, SORT_DESC, $data);

return $data;

}

三.结果

array(10) {

  [0]=>

  array(3) {

    ["id"]=>

    int(6)

    ["title"]=>

    string(15) "YzmCMS开源CMS"    ["percent"]=>

    float(57.142857142857)

  }

  [1]=>

  array(3) {

    ["id"]=>

    int(9)

    ["title"]=>

    string(15) "YzmCMS建站CMS"    ["percent"]=>

    float(57.142857142857)

  }

  [2]=>

  array(3) {

    ["id"]=>

    int(1)

    ["title"]=>

    string(24) "YzmCMS内容管理系统"    ["percent"]=>

    float(40)

  }

  [3]=>

  array(3) {

    ["id"]=>

    int(2)

    ["title"]=>

    string(9) "开源CMS"    ["percent"]=>

    float(40)

  }

  [4]=>

  array(3) {

    ["id"]=>

    int(7)

    ["title"]=>

    string(9) "免费CMS"    ["percent"]=>

    float(40)

  }

  [5]=>

  array(3) {

    ["id"]=>

    int(10)

    ["title"]=>

    string(15) "免费开源CMS"    ["percent"]=>

    float(28.571428571429)

  }

  [6]=>

  array(3) {

    ["id"]=>

    int(3)

    ["title"]=>

    string(39) "YzmCMS轻量级开源内容管理系统"    ["percent"]=>

    float(26.666666666667)

  }

  [7]=>

  array(3) {

    ["id"]=>

    int(8)

    ["title"]=>

    string(18) "轻量级开源CMS"    ["percent"]=>

    float(25)

  }

  [8]=>

  array(3) {

    ["id"]=>

    int(4)

    ["title"]=>

    string(18) "内容管理系统"    ["percent"]=>

    float(0)

  }

  [9]=>

  array(3) {

    ["id"]=>

    int(5)

    ["title"]=>

    string(24) "免费内容管理系统"    ["percent"]=>

    float(0)

  }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容