嘿,基本上我要做的是自动为用户输入字符串分配标签。现在我有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,所以你知道。 感谢
答案 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将返回
体育,酒店娱乐,健康,娱乐,人类行为,踢,瑜伽,凿子 健美操,冥想,印度哲学,搏击运动,有氧运动,运动