2011-01-28 6 views
8

Je voulais une mise en oeuvre particulière, de sorte que l'utilisateur fournit un bloc de texte comme:Extrait pertinent Tag/Mots-clés de bloc de texte

« Exigences - Une bonne connaissance, sur LAMP environnement en utilisant Linux, Apache 2, MySQL 5 et PHP 5, - Connaissance des normes Web 2.0 - Confortable avec JSON - Expérience pratique sur le travail avec les cadres, Zend, OOPs - Cross navigateur Javascripting, JQuery etc. - Connaissance de la version du logiciel de contrôle tels que la sous-version sera préférable. "

Ce que je veux faire est de sélectionner automatiquement des mots clés pertinents et créer des balises/mots-clés, par conséquent, pour la pièce au-dessus du texte, les balises pertinentes doivent être: mysql, php, JSON, jquery, contrôle de version, oop, web2 .0, javascript

Comment puis-je le faire en PHP/Javascript etc? Un headstart serait vraiment utile.

Répondre

2

Ce n'est pas facile à faire car cela nécessite un certain type de logique floue. Vous devez utiliser le YQL extracteur Yahoo Terme

Check it out: link

+0

Merci pour le lien, je cherche quelque chose comme ça. J'ai essayé YQL mais de toute façon il n'a pas reconnu beaucoup de termes. J'ai trouvé ce site appelé Zemanta qui est plutôt bon, je prévois d'utiliser les deux et de fusionner mes résultats. – sgomez

+0

c'est la chose la plus impressionnante que j'ai trouvé sur internet dans comme 5 ans ou plus ...... merci – AMB

0

Selon que vous voulez afficher les mots-clés/tags client ou si vous voulez extraire les mots-clés/tags du bloc de texte alors ne plus de calcul avec eux.

Si vous avez seulement besoin de les montrer, la gestion du client est correcte. Si vous en avez besoin pour un calcul ultérieur, utilisez la gestion côté serveur pour cela.

Je peux recommander une implémentation javascript côté client si vous pouvez fournir plus de détails. Si vous voulez génériquement « connaître » les mots-clés alors une sorte de solution intelligente est neccesary

Si vous avez une liste de mots-clés, vous pouvez utiliser regular expressions pour extraire les données

+1

Merci pour votre réponse. Pouvez-vous recommander une implémentation clientide? Ce que je veux, c'est que lorsqu'un utilisateur remplit un bloc de texte, il doit en extraire les balises pertinentes. – sgomez

16

une méthode très naïve est d'enlever commun stopwords du texte, vous laissant avec des mots plus significatifs comme 'Standards', 'JSON', etc. Vous aurez toujours beaucoup de bruit, donc vous pouvez envisager un service comme OpenCalais qui peut faire une analyse plutôt sophistiquée de votre texte .

Mise à jour:

D'accord, le lien dans ma réponse précédente a des mises en œuvre, mais vous avez demandé un si simple est ici:

function stopWords($text, $stopwords) { 

    // Remove line breaks and spaces from stopwords 
    $stopwords = array_map(function($x){return trim(strtolower($x));}, $stopwords); 

    // Replace all non-word chars with comma 
    $pattern = '/[0-9\W]/'; 
    $text = preg_replace($pattern, ',', $text); 

    // Create an array from $text 
    $text_array = explode(",",$text); 

    // remove whitespace and lowercase words in $text 
    $text_array = array_map(function($x){return trim(strtolower($x));}, $text_array); 

    foreach ($text_array as $term) { 
    if (!in_array($term, $stopwords)) { 
     $keywords[] = $term; 
    } 
    }; 

    return array_filter($keywords); 
} 

$stopwords = file('stop_words.txt'); 
$text = "Requirements - Working knowledge, on LAMP Environment using Linux, Apache 2, MySQL 5 and PHP 5, - Knowledge of Web 2.0 Standards - Comfortable with JSON - Hands on Experience on working with Frameworks, Zend, OOPs - Cross Browser Javascripting, JQuery etc. - Knowledge of Version Control Software such as sub-version will be preferable."; 

print_r(stopWords($text, $stopwords)); 

Vous pouvez le voir, et contenu de stop_word.txt dans ce Gist.

exécution ci-dessus sur votre exemple de texte produit le tableau suivant:

Array 
(
    [0] => requirements 
    [4] => linux 
    [6] => apache 
    [10] => mysql 
    [13] => php 
    [25] => json 
    [28] => frameworks 
    [30] => zend 
    [34] => browser 
    [35] => javascripting 
    [37] => jquery 
    [38] => etc 
    [42] => software 
    [43] => preferable 
) 

Alors, comme je l'ai dit, cela est un peu naïf et pourrait utiliser plus d'optimisation (plus il est lent), mais il ne tire le plus mots-clés pertinents de votre texte. Vous devriez également faire quelques ajustements sur les mots d'arrêt.Capture des termes comme Web 2.0 sera très difficile, donc encore une fois je pense que vous feriez mieux d'utiliser un service sérieux comme OpenCalais qui peut comprendre un texte et retourner une liste d'entités et de références. DocumentCloud s'appuie sur ce service même pour recueillir des informations à partir de documents.

En outre, pour la mise en œuvre du côté client que vous pourriez faire à peu près la même chose avec JavaScript, et probablement beaucoup plus propre (bien qu'il puisse être lent pour le client.)

+0

Merci Darren. C'est naïf en effet, mais très exhaustif, pouvez-vous recommander une implémentation, c'est-à-dire utiliser une sorte de chose preg_replace ou un script de correspondance efficace? – sgomez

+0

Super! Merci pour la mise en œuvre. – sgomez

+0

Est-ce que cela répond à votre question? –

5

J'ai fait un examen rapide de ces ce matin et à ma grande surprise un qui fonctionne mieux avec mon expression de test a été écrit en PHP

Ce qui semblait être le plus professionnel effectué épouvantablement: viewer.opencalais.com

D'autres qui étaient OK étaient (pas sûr de ce que la langue qu'ils sont écrits dans)

  • www.nactem.ac.uk/logiciel/Termine/# forme
  • www.alchemyapi.com/api/keyword/