2010-10-21 2 views
2

Hey, ce que j'essaie de faire, c'est d'assigner automatiquement des Tags à une chaîne d'entrée utilisateur. Maintenant, j'ai 5 étiquettes à attribuer. Chaque tag aura environ 10 mots-clés. Une chaîne ne peut recevoir qu'une seule étiquette. Pour assigner une balise à une chaîne, je dois rechercher des mots correspondant à des mots-clés pour les cinq balises. Exemple:Recherche de mots-clés (à partir d'une matrice) dans une chaîne (environ 500 caractères)

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....... 

utilisateur Chaîne: Faire le premier pas pour atteindre vos objectifs de remise en forme, payer 199 roupies pour Aérobic, Yoga, Kick Boxing, danse Bollywood et plus d'une valeur de Rs 1000 à la très haut de gamme F Chisel Bounce, Koramangala.


Maintenant, je dois décider d'une étiquette pour la chaîne ci-dessus. J'ai besoin d'un algorithme efficace pour ce problème. Je ne sais pas comment faire pour faire correspondre les mots clés pour les chaînes, mais j'ai une idée de décider de tag. Je pensais maintenir un compte de tableau pour chaque étiquette et comme un mot-clé est le nombre correspondant pour l'étiquette respective est augmentée. Si, à tout moment, le nombre d'étiquettes atteint 5, nous pouvons nous arrêter et décider de cette étiquette, ce qui nous évitera de chercher tout le contenu.

S'il vous plaît donnez tous les conseils que vous avez à ce sujet. Je vais utiliser PHP juste pour que vous sachiez. grâce

Répondre

0

Si le nombre de balises et mots-clés est petit, je me sauverait d'écrire un algorithme complexe et simplement faire:

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

L'algorithme est assez évident, mais adapté à un petit nombre d'étiquettes/mots clés.

1

Sujet intéressant! Ce que vous cherchez est similaire à l'indexation sémantique latente. Il y a la recherche here.

+0

grâce ce lien est vraiment intéressant, mais je cherchais quelque chose de plus simple que mes besoins ne sont pas si complexes h avant. – Anubhav

0

Si vous ne l'esprit en utilisant une API externe, vous devriez essayer un de ces:

Pour donner un exemple, Zemanta renverra la Tags suivants (entre autres) pour votre chaîne utilisateur:

Bollywood, Kickboxing, Koramangala, Aérobic, Boxe, Sports, Inde, Asie

Ouvrir Calais retournera

Sports, loisirs d'accueil, santé, loisirs, Comportement humain, Coup de pied, Yoga, ciseler Aérobic, méditation, philosophie indienne, sports de combat, l'exercice aérobie, exercice

+0

Je charge déjà beaucoup de fichiers externes dans mon code c'est pourquoi je ne peux pas utiliser une autre API – Anubhav

Questions connexes