如何从数组中获取最重要的事件?

时间:2015-06-17 09:34:55

标签: regex levenshtein-distance

首先,这不是特定于语言的问题,下面的示例使用PHP,但更多的是关于方法(正则表达式?)来找到答案。

假设我有一个数组:

$array = ['The Bert and Ernie game', 'The Bert & Ernie game', 'Bert and Ernie game', 'Bert and Ernie game - english version', 'Bert & Ernie (game)', 'Bert and Ernie - game'] etc...

我想获取一个显示最重要组合的组合。所以我想这样做:

$magicPattern = [something that renders most important occurrences];
preg_match($magicPattern, $array, $matches);
print_r($matches);

作为输出,我希望收到类似的内容:“Bert and Ernie game”

PS: 我没有必要寻找一个实际的阵列,这样做的概念也很棒。

更新
下面的当前代码,如果这是找到最佳版本的一个好方法的任何想法?很难从函数的source中找出它。

$array['The Bert and Ernie game']               =0; //lev distance
$array['The Bert & Ernie game']                 =0; //lev distance
$array['Bert and Ernie game']                   =0; //lev distance
$array['Bert and Ernie game - english version'] =0; //lev distance
$array['Bert & Ernie (game)']                   =0; //lev distance
$array['Bert and Ernie - game']                 =0; //lev distance

foreach($array as $currentKey => $currentVal){
    foreach($array as $matchKey => $matchVal){
        $array[$currentKey] += levenshtein($currentKey, $matchKey);
    }
}

$array = array_flip($array);
ksort($array);

echo array_values($array)[0]; //Bert and Ernie game

2 个答案:

答案 0 :(得分:1)

有许多不同的解决方案可以解决这样的问题,我个人不会为此推荐正则表达式。这通常是您使用全文搜索索引解决的问题(只需谷歌全文搜索以执行此操作的许多方法)。

对于这种特殊情况,假设您没有太多数据,您可以计算Levenshtein距离:http://php.net/manual/en/function.levenshtein.php

或使用similar_text()函数:http://php.net/manual/en/function.similar-text.php

答案 1 :(得分:0)

您需要能够查看每个值并计算数字权重的内容,然后根据权重对数组进行排序并获取最重要的项目。

权重是您的重要性",因此您可以选择为您认为更重要的字词分配更高的权重。