匹配字符串中的特定单词并对其进行分类

时间:2013-03-12 17:39:13

标签: php

我对PHP很陌生,所以请耐心等待。我正在尝试迭代一串文本中的单词,查找特定单词,对它们进行分类,然后计算每个单词类别被击中的次数。我能够轻松完成这一部分但我在计算每个类别匹配的次数时遇到了问题。这是接受我的字符串的主要函数:

public function matchThemeTest($query){
    $marriageNum = 0;
    $criminalNum = 0;
    $contactNum = 0;
    $keywords = array(
        'background'=> array('category'=>'criminal'),
        'marriage'  => array('category'=>'marriage'), 
        'criminal'  => array('category'=>'criminal'),
        'arrest'    => array('category'=>'criminal'),
        'divorce'   => array('category'=>'marriage'),
        'person'    => array('category'=>'contact'),
        'contact'   => array('category'=>'contact')
    );
    foreach (preg_split("/\s/", $query) as $word)
    {
        if (isset($keywords[$word]))
        {
            echo $keywords[$word]['category'];
            if ($keywords[$word]['category'] == 'marriage') {
                $marriageNum++;
            }
            echo $marriageNum;
        }
    }
    //return reset($matches);
}

我在这里有一个php小提琴设置:http://phpfiddle.org/main/code/i4g-mdu我一直在玩。在它的当前形式中,我可以将单词分类,但我不确定如何计算每个类别匹配的次数。我觉得我需要一个额外的循环或简单的东西,但我不确定在哪里。任何意见是极大的赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可能需要另一个数据数组来存储计数。使用这样的数组:

$counts = array(
    'criminal' => 0,
    'marriage' => 0, 
    'contact' => 0
); 

然后当你遍历foreach循环时,可以使用$ keywords [$ word] ['category']作为$ count中的键并递增它:

if(isset($keywords[$word]) {
    $counts[$keywords[$word]['category']]++;
}

然后你可以返回$ counts数组,这样调用者就可以用它来找出每个主题的数量:

return $counts;