导出商品名称相似度大于80%的产品数据

  •   
  • 1871
  • PHP
  • 0
  • super_dodo
  • 2020/10/24

最近有一个小功能需要开发,目的是随着商品数据库的数据较多,有很多商品名称相似和类似的商品,需要导出来给运营的同事去做排查和梳理。

可以使用php的函数similar_text来做判断。

计算两个字符串之间的百分比相似度:

<!DOCTYPE html>
<html>
<body>

<?php
similar_text("Hello World","Hello Shanghai",$percent);
echo $percent . "%";
//结果: 48%
?>

</body>
</html>

下面是dodo在laravel框架下实现的代码片段.

$cateId = 88;
$fields = ['id','cate_id','title','is_status'];
$cnt = GoodsList::query()->where(['cate_id'=> $cateId])->select($fields)->orderBy('title')->count();
$list = GoodsList::query()->where(['cate_id'=> $cateId])->select($fields)->orderBy('title')->get()->toArray();

echo '<pre>';
for ($i=0; $i<$cnt; $i++) {
    if(isset($list&#91;$i&#93;) && is_array($list&#91;$i&#93;)) {     //后面的ID可能会被删除
        for ($j=$i; $j<$cnt; $j++){
            $prev = $list&#91;$i&#93; &#91;'title'&#93;;
            $next = $list&#91;$j+1&#93; &#91;'title'&#93; ?? '';
            similar_text($prev,$next,$percent);
            if($percent > 80) {
                $dataPrev = $list[$i];
                $dataNext = $list[$j+1];
                echo $dataPrev['id'].'#####'.$dataPrev['cate_id'].'#####'.$dataPrev['is_status'].'#####'.$dataPrev['title']."\r\n";
                echo $dataNext['id'].'#####'.$dataNext['cate_id'].'#####'.$dataNext['is_status'].'#####'.$dataNext['title']."\r\n";
                echo "AAAAA\r\n";
                unset($list[$j+1]);     //删除后面的id
            //    echo $prev.'===='.$next.'===='.$percent."<hr>";
            }
        }
    }
}
exit();

/*similar_text("Hello World","Hello Peter",$percent);
echo $percent;*/
exit();