为什么';我的测试脚本(PHP)不能工作吗?

为什么';我的测试脚本(PHP)不能工作吗?,php,testing,tweets,Php,Testing,Tweets,我有一个包含推特的数据库。此外,我将这些推文归类为“负面”、“中性”或“正面”。我已经手动完成了这项工作,现在正试图弄清楚我的计算机能够基于朴素贝叶斯分类器对它们进行多好的分类 为了测试分类的准确性(计算机以与我手动分类相同的方式对tweet进行分类的数量除以总数量),已经编写了一个脚本 然而,我面临这个PHP脚本的一个问题。运行它时,它会给出错误“在C:\wamp\等中被零除”。这可能是因为计数器没有更新。此外,“正确类别”的数量似乎也没有更新。这两部分是必不可少的,因为准确度的公式是:“正确

我有一个包含推特的数据库。此外,我将这些推文归类为“负面”、“中性”或“正面”。我已经手动完成了这项工作,现在正试图弄清楚我的计算机能够基于朴素贝叶斯分类器对它们进行多好的分类

为了测试分类的准确性(计算机以与我手动分类相同的方式对tweet进行分类的数量除以总数量),已经编写了一个脚本

然而,我面临这个PHP脚本的一个问题。运行它时,它会给出错误“在C:\wamp\等中被零除”。这可能是因为计数器没有更新。此外,“正确类别”的数量似乎也没有更新。这两部分是必不可少的,因为准确度的公式是:“正确等级”除以“计数器”

我的问题是:当你看剧本的时候,你认为问题是什么?我怎样才能修复它呢

用于测试的脚本:

$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();
$test_array=array();
$counter=0;
$timer1=微时间(真);
$right_class=0;
foreach($test\u设置为$test\u项){
$tweet_id=$test_item['tweet_id'];
$class_id_shouldbe=$test_item['class_id'];
$tweet=Tweets::loadOne($tweet_id);
//#如果尚未完成预处理
//$steps->processTweet($tweet\u id,$tweet);
//$tweet=Tweets::loadOne($tweet_id);
如果((int)$tweet['classified']>0 | |!$tweet['valid'])继续;
如果(strlen($tweet['processed_text'])==0){
$steps->processTweet($tweet\u id,$tweet);
$tweet=Tweets::loadOne($tweet_id);
如果(strlen($tweet['processed_text'])==0){
echo“Kon tweet'$tweet_id'niet processen.
”; 持续 } } $class_id=$classifier->classify($tweet['processed_text']); #在数据库中添加推文 //Tweets::addClassId($tweet\u id,$class\u id\u shouldbe); $test\u数组[$tweet\u id]=数组( “人类说了什么”=>$class\u id\u应该是, “你说什么”=>$class\u id, ); 如果($class\u id\u shouldbe==$class\u id)$right\u classes++; $counter++; 如果($counter>936)中断; echo“$tweet\u id,$class\u id\u shouldbe,$class\u id
”; } $timer2=微时间(真); 回音“

klaar in.”四舍五入($timer2-$timer1,3)。“秒
”; echo($right_classes/$counter)*100'; 退出();
首先修复错误,然后尝试验证为什么
$counter
为零。要修复
$计数器
,只需在除法前验证:

if($counter!=0) echo ($right_classes/$counter)*100 .' %'; else echo '0 %';
然后查看代码,使用continue在
foreach
中获取下一项,然后不能保证达到
$counter
,然后得到
除零的错误


希望有帮助

谢谢你的工作!多亏去掉了代码的“continue”部分,它才能工作。好建议!另外,在
$timer2=microtime(true)
之前,你似乎有一个杂散的支架
}
。啊,你有一个
foreach
藏在那里。请,请始终使用缩进-它在编辑器中对您有益,并使问题在此处可读。谢谢您的评论。下一次我会确保让这个问题更具可读性。你现在仍然可以编辑它——这些问题应该面向未来的广大读者,而不仅仅是他们的海报。你会编辑吗?谢谢