36 votes

Comment extraire les mots-clés utilisés dans le texte ?

Comment exploiter les données d'un tas de texte pour obtenir des mots-clés par usage ? ("Jacob Smith" ou "clôture")

Existe-t-il déjà un logiciel pour faire cela ? Même de manière semi-automatique, et s'il peut filtrer les mots simples comme "le", "et", "ou", je pourrais alors atteindre les sujets plus rapidement.

119voto

Joseph Turian Points 2622

C'est une question ouverte en PNL, il n'y a donc pas de réponse simple.

Ma recommandation pour une solution rapide et efficace pour moi est la suivante topia.termextract .

Yahoo propose un service d'extraction de mots-clés ( http://developer.yahoo.com/search/content/V1/termExtraction.html ) qui a un faible taux de rappel mais une grande précision. En d'autres termes, il vous donne un petit nombre de termes de haute qualité, mais il manque un grand nombre de termes dans vos documents.

En Python, il existe topia.termextract ( http://pypi.python.org/pypi/topia.termextract/ ). Il est relativement bruyant, et propose de nombreux faux mots-clés, mais il est simple à utiliser.

Termine ( http://www.nactem.ac.uk/software/termine/ ) est un service web britannique qui est également relativement bruyant et propose de nombreux mots-clés fictifs. Cependant, il me semble être légèrement plus précis que topia.termextract. A VOIR.

Une façon de débruiter les résultats contenant trop de mots-clés (par exemple topia.termextract et termine) est de créer un vocabulaire de termes qui apparaissent fréquemment, puis de rejeter les termes proposés qui ne font pas partie du vocabulaire. En d'autres termes, faites deux passages sur votre corpus : Au premier passage, comptez la fréquence de chaque mot-clé. Lors du second passage, éliminez les mots-clés trop rares.

Si vous voulez écrire la vôtre, la meilleure introduction est peut-être celle écrite par Park, qui est maintenant chez IBM :

  • "Extraction automatique de glossaires : au-delà de l'identification terminologique" disponible à l'adresse suivante http://portal.acm.org/citation.cfm?id=1072370
  • "Extraction et utilisation de glossaires dans le système de recherche et de fourniture d'informations pour le support technique d'IBM".

Voici d'autres références, si vous voulez en savoir plus :

  • http://en.wikipedia.org/wiki/Terminology_extraction
  • "CorePhrase : Keyphrase Extraction for Document Clustering" (en anglais)
  • Liu et al 2009 de NAACL HLT
  • "Identification automatique de phrases non composées"
  • "L'exploration de données rencontre la découverte de collocations"
  • Ainsi qu'une foule d'autres références que vous pouvez dénicher sur le sujet.

39voto

Gavin Miller Points 21752

L'algorithme général va se dérouler comme suit :

\- 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 compte de fréquence de tous les mots du texte. Vous pouvez ensuite prendre ces valeurs et les diviser par le nombre total de mots pour obtenir un pourcentage de fréquence. Tout autre traitement est à votre discrétion.

Vous allez également vouloir examiner Endiguer . L'étymologie est utilisée pour réduire les mots à leur racine. Par exemple going => go , cars => car etc.

Un tel algorithme est appelé à être utilisé dans les filtres anti-spam, l'indexation des mots-clés, etc.

9voto

Il existe également un service appelé Alchimie qui peuvent faire de l'extraction de termes, du marquage de concepts, de l'analyse de sentiments, etc.

C'est valide, je l'ai testé mais je ne connais pas leur politique commerciale (si elle existe). Ils fournissent des API pour tout 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.

5voto

ChristopheD Points 38217

Vous n'avez pas précisé la technologie avec laquelle vous travaillez, je suppose donc qu'un script shell script est également une possibilité.

J'ai toujours été impressionné par l'exemple de l'analyse de la fréquence des mots dans le document Guide avancé des scripts Bash (12-11)

L'exemple suivant récupère un livre du projet Gutenburg et rédige un rapport d'analyse de la fréquence des 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" (le, et, un...) etc.

1voto

Luca Points 1

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X