在字符串中搜索关键字(来自矩阵)(大约500个字符)

时间:2010-10-21 09:56:27

标签: php algorithm full-text-search

嘿,基本上我要做的是自动为用户输入字符串分配标签。现在我有5个标签要分配。每个代码都有大约10个关键字。字符串只能分配一个标记。为了将标签分配给字符串,我需要搜索匹配所有五个标签的关键字的单词。 例如:

TAGS:     Keywords
Drink:    Beer, whiskey, drinks, drink, pint, peg.....
Fitness:  gym, yoga, massage, exercise......
Apparels: men's shirt, shirt, dress......
Music:    classical, western, sing, salsa.....
Food:     meal, grilled, baked, delicious.......

用户字符串:迈出健身目标的第一步,在健身房,瑜伽,踢拳击,宝莱坞舞蹈上支付199卢比,在Koramangala的非常高级F Chisel Bounce中获得价值1000卢比。


现在我需要决定上面字符串的标签。我需要一个时间有效的算法来解决这个问题。我不知道如何为字符串匹配关键字,但我确实想到了决定标签。我正在考虑为每个标签维护一个数组计数,并且当关键字匹配时,相应标签的计数会增加。如果在任何时候计算任何标签达到5,我们可以停止并决定该标签,这只会使我们无法搜索整个标签。

请对此提出任何建议。我将使用PHP,所以你知道。 感谢

3 个答案:

答案 0 :(得分:1)

有趣的话题!你正在寻找的东西类似于潜在的语义索引。有任务here

答案 1 :(得分:0)

如果标签和关键字的数量很少,我会省去写一个复杂的算法,只需这样做:

$tags = array(
    'drink' => array('beer', 'whiskey', ...),
    ...
);
$string = 'Take first step ...';
$bestTag = '';
$bestTagCount = 0;
foreach ($tags as $tag => $keywords) {
    $count = 0;
    foreach ($keywords as $keyword) {
        $count += substr_count($string, $keyword);
    }
    if ($count > $bestTagCount) {
        $bestTagCount = $count;
        $bestTag = $tag;
    }
}
var_dump($bestTag);

该算法非常明显,但仅适用于少量标签/关键字。

答案 2 :(得分:0)

如果您不介意使用外部API,则应尝试以下方法之一:

举一个例子,Zemanta将为您的用户字符串返回以下标记(以及其他内容):

  

宝莱坞,跆拳道,Koramangala,健美操,拳击,体育,印度,亚洲

Open Calais将返回

  

体育,酒店娱乐,健康,娱乐,人类行为,踢,瑜伽,凿子   健美操,冥想,印度哲学,搏击运动,有氧运动,运动