首先,这不是特定于语言的问题,下面的示例使用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
答案 0 :(得分:1)
有许多不同的解决方案可以解决这样的问题,我个人不会为此推荐正则表达式。这通常是您使用全文搜索索引解决的问题(只需谷歌全文搜索以执行此操作的许多方法)。
对于这种特殊情况,假设您没有太多数据,您可以计算Levenshtein距离:http://php.net/manual/en/function.levenshtein.php
或使用similar_text()
函数:http://php.net/manual/en/function.similar-text.php
答案 1 :(得分:0)
您需要能够查看每个值并计算数字权重的内容,然后根据权重对数组进行排序并获取最重要的项目。
权重是您的重要性",因此您可以选择为您认为更重要的字词分配更高的权重。