1

如何匹配 array_diff 计数中的相似词

TV-Television、Inches-Inch、Mobile-Mobile Phones、Mobile-Phones 等单个单词的多个名称问题。因此在 array_diff 计数中创建错误的百分比

例子 :

    $str1 = "Samsung Television 21 Inches LED BH005DE";
    $str2 = "Samsung 21 Inch LED TV";

    $arr1 = explode(' ', $str1);
    $arr2 = explode(' ', $str2);

    $differenceCount = count(array_diff($arr2, $arr1));

在上面的str1和str2包含Television,TVInches,Inch的话..如何解决这个问题

4

1 回答 1

2

最明显的方法是使用同义词:

$str1 = "Samsung Television 21 Inches LED BH005DE";
$str2 = "Samsung 21 Inch LED TV";

//synonyms:
$syns = [
   'TV'   => ['TV', 'Television'],
   'Inch' => ['Inch', 'Inches']
];

//replace:
$str1 = array_reduce(array_keys($syns), function($c, $x) use ($syns)
{
   return $c = preg_replace('/\b'.join('\b|\b', $syns[$x]).'\b/', $x, $c);
}, $str1);
//now, str1 looks like "Samsung TV 21 Inch LED BH005DE"

$str2 = array_reduce(array_keys($syns), function($c, $x) use ($syns)
{
   return $c = preg_replace('/\b'.join('\b|\b', $syns[$x]).'\b/', $x, $c);
}, $str2);
//now, str2 looks like "Samsung 21 Inch LED TV"

$arr1 = explode(' ', $str1);
$arr2 = explode(' ', $str2);


//var_dump(array_diff($arr1, $arr2));//['BH005DE']

在您的情况下,您不能依赖某种单词形式(例如Inch- Inches)-因为您也需要解析缩写词-这些是具有特定含义的情况。因此,使用同义词可能是解决所有情况的唯一方法。

于 2014-03-24T12:17:15.247 回答