Analyse de la langue pour trouver des mots importants

9

Je recherche des informations et des théories sur la façon d'aborder un sujet lexical.

Disons que j'ai une collection de chaînes, qui peut être juste une phrase ou potentiellement plusieurs phrases. Je voudrais analyser ces chaînes et déchirer les mots les plus importants, peut-être avec un score qui indique la probabilité que le mot soit important.

Regardons quelques exemples de ce que je veux dire.

Exemple 1:

"Je veux vraiment un Keurig, mais je ne peux pas me le permettre!"

Ceci est un exemple très basique, juste une phrase. En tant qu'humain, je peux facilement voir que "Keurig" est le mot le plus important ici. En outre, «se permettre» est relativement important, même si ce n'est clairement pas le point principal de la phrase. Le mot "je" apparaît deux fois, mais ce n'est pas important du tout car il ne nous donne pas vraiment d'informations. Je pourrais m'attendre à voir un hachage de mot / score quelque chose comme ceci:

"Keurig" => 0.9
"afford" => 0.4
"want"   => 0.2
"really" => 0.1
etc...

Exemple # 2:

"Je viens d'avoir l'une des meilleures pratiques de natation de ma vie. J'espère que je pourrai maintenir mon temps après la compétition. Si seulement j'avais pensé à prendre ma montre non étanche."

Cet exemple a plusieurs phrases, il y aura donc des mots plus importants tout au long. Sans répéter l'exercice ponctuel de l'exemple n ° 1, je m'attendrais probablement à voir sortir deux ou trois mots vraiment importants: "natation" (ou "pratique de la natation"), "compétition", & "montre" (ou "étanche montre "ou" montre non étanche "selon la façon dont le trait d'union est traité).

Compte tenu de quelques exemples comme celui-ci, comment feriez-vous pour faire quelque chose de similaire? Existe-t-il déjà des bibliothèques ou des algorithmes (open source) en programmation qui le font déjà?

Matt Huggins
la source
Aussi, c'est mon premier post sur programmers.stackexchange.com. Toutes mes excuses si ce n'est pas le bon endroit et appartient à StackOverflow ou à un autre site SE. Heureux de déplacer la question si nécessaire.
Matt Huggins
Je ne comprends pas à la question ce que vous essayez d'accomplir. Pour le premier exemple notamment, les mots "Keurig" et "allow" pourraient être identifiés par un simple contrôle statistique: parmi les mots de la phrase, ces deux mots sont moins courants en anglais que les autres. Donc, si vous aviez une base de données de fréquences de mots, vous pourriez facilement identifier ces mots.
Qwertie

Réponses:

5

Il y a certainement des gens qui réfléchissent au problème que vous décrivez. Le classement et l'extraction des mots uniques pertinents dans le texte (pdf) de João Ventura et Joaquim Ferreira da Silva est une belle introduction aux techniques de classement existantes ainsi que des suggestions d'amélioration. Toutes les techniques qu'ils décrivent reposent sur un corpus (beaucoup de texte) par rapport à une ou deux lignes de texte. Votre corpus devrait être la collecte de tous les échantillons ou éventuellement de nombreux corpus d'échantillons collectés provenant de sources spécifiques. Gardez à l'esprit que la pertinence d'un seul mot (unigramme) est en grande partie un problème non résolu. Comme le décrit l'article:

"... en utilisant des méthodes purement statistiques, ce type de classification n'est pas toujours simple ni même exact car, bien que la notion de pertinence soit un concept facile à comprendre, il n'y a normalement pas de consensus sur la frontière qui sépare la pertinence de la non-pertinence. Par exemple, des mots comme «République» ou «Londres» ont une pertinence significative et des mots comme «ou» et «depuis» n'ont aucune pertinence, mais qu'en est-il des mots comme «lire», «terminer» et «suivant»? des mots sont problématiques car il n'y a généralement pas de consensus sur leur valeur sémantique. "

Il existe de nombreuses boîtes à outils de traitement du langage naturel open source . (Faites attention. Certains outils sont gratuits pour la recherche mais nécessitent une licence commerciale pour une utilisation commerciale.) Ils vous faciliteront la vie quelle que soit l'approche que vous choisissez.

Je connais le mieux le Natural Language Toolkit (NLTK) . Il est facile à utiliser, bien documenté et est présenté dans le livre Natural Language Processing with Python (disponible gratuitement en ligne). Comme exemple simple de ce que NLTK pourrait faire pour vous, imaginez utiliser son tagger de partie de discours . Avec la partie du discours de chaque mot identifiée, vous pourriez considérer les noms propres comme très importants et les adjectifs moins. Les verbes peuvent être importants et les adverbes moins. Ce n'est en aucun cas un classement à la pointe de la technologie, mais vous obtenez des informations utiles avec peu d'effort. Lorsque vous êtes prêt à passer à une analyse plus sophistiquée, la capacité intégrée de NLTK de segmenter, étiqueter, segmenter et classer vous permettra de vous concentrer sur les autres détails de votre solution.

Marche de Corbin
la source
1

Le traitement du langage naturel est sa propre discipline avec pas mal de recherches formelles. Je commencerais par regarder là-bas.

Je reconsidérerais également mes besoins. Même après plus de 50 ans de recherche, Siri est le meilleur informaticien. Je ne m'attendrais pas à ce qu'un ordinateur réussisse avec régularité ce dont vous parlez.

S'il y a certaines limites au discours (comme Siri en supposant que vous avez une commande ou une question simple), cela peut être mieux. Revoir mes besoins (en supposant que j'ai besoin de la PNL) comprendrait la définition de mes limites. Après cela, je chercherais probablement une tonne d'exemples. En partie pour tester tout ce que je propose, mais de nombreuses solutions modernes impliquent un apprentissage automatique. J'aurais besoin de ces exemples comme entrée dans la courbe d'apprentissage.

Donc, en résumé, je doute sérieusement que quoi que ce soit puisse vous donner de bons scores dans ce genre de scénario sans contexte.

Telastyn
la source
+1 pour Siri dig ... ou promotion ...
Aaron McIver