Comment extraire les mots clés utilisés dans le texte? [fermé]
Comment puis-je extraire des données sur une pile de texte pour obtenir des mots-clés par utilisation? ("Jacob Smith" ou "clôture")
Et Existe-t-il un logiciel pour le faire déjà? même semi-automatiquement, et s'il peut filtrer des mots simples comme "le", "et", "ou", alors je pourrais accéder aux sujets plus rapidement.
6 réponses
L'algorithme général va comme ceci:
- Obtain Text - Strip punctuation, special characters, etc. - Strip "simple" words - Split on Spaces - Loop Over Split Text - Add word to Array/HashTable/Etc if it doesn't exist; if it does, increment counter for that word
Le résultat final est un nombre de fréquence de tous les mots dans le texte. Vous pouvez ensuite prendre ces valeurs et diviser par le nombre total de mots pour obtenir un pourcentage de fréquence. Tout traitement ultérieur est à vous.
Vous allez également vouloir regarder dans Découlant. Résultant est utilisé pour réduire les mots à leur racine. Par exemple going => go
, cars => car
, etc.
Un algorithme comme celui-ci va être commun dans le spam filtres, indexation de mots clés et autres.
C'est une question ouverte en PNL, donc il n'y a pas de réponse simple.
Ma recommandation pour les "travaux-pour-moi" rapides et Sales est topia.termextract .
Yahoo a un service d'extraction de mots clés ( http://developer.yahoo.com/search/content/V1/termExtraction.html ) qui est faible rappel mais haute précision. En d'autres termes, il vous donne un petit nombre de termes de qualité, mais manque beaucoup de termes dans les documents.
En Python, il y a topia.termextract ( http://pypi.python.org/pypi/topia.termextract/). il est relativement bruyant, et propose de nombreux mots-clés faux, mais il est simple à utiliser.
Termine ( http://www.nactem.ac.uk/software/termine/) est un webservice britannique qui est également relativement bruyant, et propose de nombreux mots-clés faux. Cependant, il me semble être un peu plus précis que topia.termextract. YMMV.
Une façon de dénoter les résultats avec trop de mots clés (par exemple topia.termextract et termine) est de créer un vocabulaire des termes qui se produisent fréquemment, puis jeter les termes proposés qui ne sont pas dans le vocabulaire. En d'autres termes, faites deux passes sur votre corpus: la première passe, comptez la fréquence de chaque mot-clé. Dans la deuxième passe, jetez les mots-clés qui sont trop rares.
Si vous voulez écrire le vôtre, la meilleure introduction est peut-être écrite par Park, qui est maintenant chez IBM:
- "extraction automatique de Glossaire: au-delà de l'identification terminologique" disponible à http://portal.acm.org/citation.cfm?id=1072370
- "extraction et utilisation du glossaire dans le système de recherche et de diffusion D'informations pour le support technique IBM"
Voici quelques autres références, si vous voulez en savoir plus:
- http://en.wikipedia.org/wiki/Terminology_extraction
- "CorePhrase: Extraction de claviers pour le regroupement de documents"
- Liu et al 2009 de NAACL HLT
- "Identification automatique des Phrases Non compositionnelles "
- "L'Exploration De Données Rencontre La Découverte De Collocations"
- ainsi qu'une foule d'autres références que vous pouvez creuser sur le sujet.
Il y a aussi un service appelé Alchemy qui peut faire l'extraction de terme, le marquage de concept, l'analyse de sentiment et ainsi de suite.
C'est valide, Je l'ai testé mais je ne sais pas s'ils ont des politiques commerciales (le cas échéant). Ils fournissent des API pour n'importe quel type de langage (à peu près).
J'ai lu quelque part (désolé Je ne me souviens plus où) que la sortie donnée par Alchemy est moins bruyante par rapport à celles proposées par Joseph.
Vous n'avez pas spécifié une technologie avec laquelle vous travaillez, donc je suppose qu'un script shell est également une possibilité.
J'ai toujours été impressionné par l'exemple d'analyse de fréquence de mot dans le Advanced Bash-Scripting Guide (12-11)
Ce qui suit, par exemple, récupère un livre du projet Gutenburg et écrit un "rapport" d'analyse de fréquence de mots:
wget http://www.gutenberg.org/files/20417/20417-8.txt -q -O- |
sed -e 's/\.//g' -e 's/\,//g' -e 's/ /\
/g' | tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr > output.txt
Devrait être extensible pour exclure les mots d'une liste 'commune' (the, and, A...) etc.
Je recommande personnellement Maui ( http://code.google.com/p/maui-indexer/): Il s'appuie sur KeA mais l'étend de diverses manières. Il est formable et peut utiliser des terminologies formatées RDF.
J'ai déjà utilisé NTLK pourreconnaître les entités nommées avec un certain succès. Il est particulièrement bon de reconnaître les noms des personnes et des organisations.