为什么我的测试脚本(PHP)不起作用?

时间:2014-07-06 11:39:19

标签: php testing tweets

我有一个包含推文的数据库。此外,我将这些推文分类为“否定”,“中性”和“中性”。或者'积极的'。我已经手动完成了这个工作,我现在正试图弄清楚我的电脑能够根据Naive Bayes分类器对其进行分类。

为了测试分类的准确性(计算机分类的推文数量与手动除以总数量相同),编写了一个脚本。

但是我遇到了这个PHP脚本的问题。运行时,它会在C:\ wamp \和-so-on'中将错误“除以零”。这可能是因为计数器未更新。此外,正确的班级数量和#39;似乎也没有更新。这两个部分是必不可少的,因为准确性的公式是:'正确的等级'除以' counter'。

我的问题是:在查看脚本时,您认为问题是什么?我怎么可能修复它?

测试脚本:

$test_array = array();
$counter = 0;

$timer1 = microtime(true);
$right_classes = 0;

foreach ($test_set as $test_item) {

$tweet_id = $test_item['tweet_id'];
$class_id_shouldbe = $test_item['class_id'];

$tweet = Tweets::loadOne($tweet_id);

// # Preprocess if not done already
// $steps->processTweet($tweet_id, $tweet);
// $tweet = Tweets::loadOne($tweet_id);

if ((int) $tweet['classified'] > 0 || !$tweet['valid']) continue;

if (strlen($tweet['processed_text']) == 0) {

    $steps->processTweet($tweet_id, $tweet);
    $tweet = Tweets::loadOne($tweet_id);
    if (strlen($tweet['processed_text']) == 0) {
        echo "Kon tweet '$tweet_id' niet processen. <br>";          
        continue;
    } 
}

$class_id = $classifier->classify($tweet['processed_text']);

# Add tweets in database
// Tweets::addClassId($tweet_id, $class_id_shouldbe);

$test_array[$tweet_id] = array(
    'what_human_said' => $class_id_shouldbe,
    'what_classifier_said' => $class_id,        
);

if ($class_id_shouldbe == $class_id) $right_classes++;

$counter++;

if ($counter > 936) break;

echo "$tweet_id,$class_id_shouldbe,$class_id<br>"; 
}

$timer2 = microtime(true);

echo '<br><br>klaar in '.round($timer2-$timer1, 3).' sec<br>';
echo ($right_classes/$counter)*100 .' %'; 

exit();

1 个答案:

答案 0 :(得分:0)

首先修复错误,然后尝试验证$counter为零的原因。修复$counter只需在分割前进行验证:

if($counter!=0) echo ($right_classes/$counter)*100 .' %'; else echo '0 %';

然后查看您的代码,您继续使用foreach中的下一项,然后无法保证达到$counter,然后您会收到Division by zero错误。

希望它有所帮助!