2015-06-17 41 views
0

首先,這不是一個特定於語言的問題,下面的例子使用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); 

作爲輸出我希望收到類似:「伯特和厄尼遊戲」

PS: 我沒有必要尋找一個實際的數組,一個概念這樣做也會很棒。

UPDATE:
低於當前的代碼,如果這個任何想法,將找到一個發生的最好版本的好方法?很難從功能的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

如何程序可能分不清什麼是重要還是不重要? – psmears

+0

夠公平的。也許「重要」這個詞沒有被正確選擇,但是這個問題的目標是正確的嗎? –

+0

不是真的,除非你可以更詳細地說你的意思。你的意思是單獨發生的話最頻繁嗎?在同一個字符串中出現頻率最高?發生最頻繁的彼此相鄰?還有別的嗎?如果你能告訴我們你真正想要的是什麼,它會容易得多:) – psmears

回答

1

有很多不同的解決方案來解決這個問題,我個人不會推薦這個正則表達式。這通常是你可以使用全文搜索索引來解決的問題(只是谷歌全文搜索的方法很多)。

對於這種特殊的情況下,假設你沒有太多的數據,你可以只計算Levenshtein距離:http://php.net/manual/en/function.levenshtein.php

或者使用similar_text()功能:http://php.net/manual/en/function.similar-text.php

+0

謝謝Wolph,我認爲這個lev。功能是最好的起點。但是,我也需要解決方案。有了這個,我的意思是說 - 從我的俗氣的例子 - 我已經需要知道「伯特和厄尼遊戲」是最好的解決方案,我與其他人相比。 所以,我可以遍歷我的數組來設置'x',並且我再次匹配'y'。問題是,我不知道'y' ... 有什麼想法? –

+0

對我更新的問題有任何想法,非常感謝 –

+1

@bvl:獲得「最接近」匹配的最佳方法是從每個句子到每個其他句子建立一個距離矩陣。請注意,這對於很多物品來說非常重。對於'n'項目它是'n * n',因此對於'100'項目,您將計算'10000'個距離(實際上是a→b = b→a'的一半)。你只需要一個2維矩陣和你的循環中的2個層次 – Wolph

0

您需要查看每個值並計算數字權重的東西,然後根據權重對數組進行排序並取最上面的項目。

重量是您的「重要性」,因此您可以選擇爲您認爲更重要的詞彙賦予更高的權重。

相關問題