Php 搜索字符串中的关键字(从矩阵中)(大约500个字符)

Php 搜索字符串中的关键字(从矩阵中)(大约500个字符),php,algorithm,full-text-search,Php,Algorithm,Full Text Search,嘿,基本上我要做的是自动将标签分配给用户输入字符串。现在我有5个标签要分配。每个标签将有大约10个关键字。一个字符串只能分配一个标记。为了将标记分配给字符串,我需要搜索与所有五个标记的关键字匹配的单词。 例如: 用户字符串:迈出实现健身目标的第一步,支付199卢比的有氧运动、瑜伽、跆拳道、宝莱坞舞蹈,以及更高价值的1000卢比,在Koramangala的非常高级的F凿子Bounce 现在我需要为上面的字符串决定一个标记。我需要一个时间效率高的算法来解决这个问题。我不知道如何为字符串匹配关键字,

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

用户字符串:迈出实现健身目标的第一步,支付199卢比的有氧运动、瑜伽、跆拳道、宝莱坞舞蹈,以及更高价值的1000卢比,在Koramangala的非常高级的F凿子Bounce


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

请给出你对此的任何建议。我将使用php只是让你知道。
谢谢

如果标签和关键字的数量较少,我可以省去编写复杂的算法,只需执行以下操作:

$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);

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

有趣的主题!您所寻找的是类似于潜在语义索引的东西。还有任务。

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

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

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

开放加莱将回归

运动、娱乐、健康、娱乐、人类行为、踢腿、瑜伽、凿子 有氧运动、冥想、印度哲学、格斗运动、有氧运动、运动


谢谢,这个链接真的很有趣,但我一直在寻找更简单的东西,因为我的需求在这里并不复杂。我已经在代码中加载了很多外部文件,这就是为什么不能使用其他api的原因
$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);