2014-03-27 62 views
0

我在數組中有一組tweet文本。我正在嘗試查看這些文本中出現特定詞語的次數。substr_count每個循環的雙精度值

但它不只是一個單詞,而是從外部文件加載的單詞數組。對於每個字都需要計數。

<?php 
ini_set('display_startup_errors',1); 
ini_set('display_errors',1); 
error_reporting(-1); 

$poswords = file('positive.csv'); 

$array = array("value", "bar", "ACCOMPLISHES", "valveworld", "able I am not bladiebla"); 
$count = 0; 
foreach ($poswords as $posword) { 
    foreach ($array as $value) { 
     $count += substr_count(strtolower($value), strtolower($posword)); 
    } 
    echo "Word: ".strtolower($posword)."  Count: ".$count."</br>"; 
} 
//return $count; 
?> 

所以首先我加載單詞列表。然後我有一個名爲$ array的文本數組。然後我在每個單詞和每個單詞之間循環,檢查該單詞是否出現在具有第二個循環的文本中。 然後對於每個循環,我都會迴應該單詞的計數。

當U strtolower($ posword)它總是導致0沒有mather我做什麼。當我將它改爲一個單詞時,例如「價值」,我得到更高的計數。然後它將每個單詞+1加到count變量中。

有人可以弄清楚我做錯了什麼?提前致謝。

P.S:最終目標是從發生的單詞中創建標籤雲。

回答

0

我想我不明白當前代碼中的單個$count值,如果您試圖爲標籤雲構建計數。我認爲您需要獲取$poswords陣列中每個單詞的出現次數。你應該可以這樣做:

$poswords = file('positive.csv', FILE_IGNORE_NEW_LINES); 

// create an array to count your words, 
// populated with words as keys and 0 as initial value 
$word_counts = array_fill_keys($poswords, 0); 

// your array of haystack strings 
$array = array("value", "bar", "ACCOMPLISHES", "valveworld", "able I am not bladiebla"); 

// loop through each haystack string 
foreach ($array as $haystack) { 
    foreach($poswords as $needle) {  
     $match_count = substr_count(strtolower($haystack), strtolower($needle)); 
     $word_counts[$needle] += $match_count; 
    } 
} 
var_dump($word_counts); 
+0

首先感謝您的迴應。我實現了自己的方式並進行了測試,但每個單詞仍然會產生0個結果,同時它也會出現在其中一個單詞上,因爲它也在列表中。我正在使用的列表是:http://www3.nd.edu/~mcdonald/Data/Finance_Word_Lists/LoughranMcDonald_Positive.csv可能是什麼問題? – Emrulez

+0

這可能是一個空白問題。查看有關修剪'$ poswords'中的字符串並將它們轉換爲小寫字符的建議更新。 –

+0

Ahh我沒有那樣做:實現新的代碼導致這個錯誤:strtolower()期望只有1個參數,2給出的仍然是零。但使用以前的代碼與此更改似乎工作:$ poswords = file('positive.csv',FILE_IGNORE_NEW_LINES); – Emrulez