Algorithmes ou bibliothèques pour l'analyse textuelle, en particulier: mots dominants, phrases à travers le texte, et la collection de texte

je travaille sur un projet où je dois analyser une page de texte et des collections de pages de texte pour déterminer les mots dominants. J'aimerais savoir s'il y a une bibliothèque (de préférence c# ou java) qui s'occupera du gros travail pour moi. Si non, est-il un algorithme ou plusieurs qui permettrait d'atteindre mes objectifs ci-dessous.

ce que je veux faire est similaire aux nuages de mots construits à partir d'une url ou d'un flux rss que vous trouvez sur le web, sauf que je ne veux pas la visualisation. Ils sont utilisés tout le temps pour analyser les discours des candidats à la présidence pour voir quel est le thème ou les mots les plus utilisés.

la complication, c'est que j'ai besoin de faire cela sur des milliers de documents courts, et puis collections ou catégories de ces documents.

Mon plan initial était d'analyser le document, puis filtre les mots communs, de, la, il, elle, etc.. Puis compter le nombre de fois où les mots restants apparaissent dans le texte (et dans l'ensemble collection/catégorie).

le problème est que dans l'avenir, je voudrais traiter les bourrage, formes plurielles, etc.. Je voudrais également voir s'il existe un moyen d'identifier les phrases importantes. (Au lieu d'un nombre d'un mot, le comte de phrase étant 2-3 mots)

toute orientation sur une stratégie, des bibliothèques ou des algorithmes qui pourraient aider est appréciée.

21
demandé sur Chris 2008-10-21 02:38:22

7 réponses

une option pour ce que vous faites est la fréquence de terme pour inverser la fréquence de document, ou TF-idf. Les termes les plus forts auront la pondération la plus élevée dans ce calcul. Vérifiez si ici: http://en.wikipedia.org/wiki/Tf-idf

une autre option est d'utiliser quelque chose comme un classificateur Bayes naïf en utilisant des mots comme caractéristiques et de trouver ce que les caractéristiques les plus fortes sont dans le texte pour déterminer la classe du document. Ce serait le travail de même avec un classificateur d'entropie maximum.

en ce qui concerne les outils pour faire ceci, le meilleur outil pour commencer serait NLTK, une bibliothèque Python avec une documentation étendue et des tutoriels: http://nltk.sourceforge.net/

pour Java, essayez OpenNLP: http://opennlp.sourceforge.net/

pour le truc de phrase, considérez la deuxième option que j'ai offert en utilisant bigrams et trigrams comme caractéristiques, ou même en termes de TF-idf.

bonne chance!

17
répondu Robert Elwell 2008-10-20 23:05:20

pour ajouter à la réponse de Robert Elwell:

  • des formes de mots qui se détachent et s'effondrent. Une méthode simple en anglais est d'utiliser porter Stemming sur les formes de mot en bas de page.
  • , un terme pour les "mots communs" est "mots vides" ou "arrêter la liste"
  • la lecture du livre NLTK, tel que suggéré, expliquera bien un grand nombre de ces questions d'introduction.
  • certains des problèmes vous doivent s'attaquer sont parsing up phrases (de sorte que vos bigrammes et les phrases n-gram ne traversent pas les limites des phrases), la division des phrases en jetons, et de décider ce qu'il faut faire au sujet des formes possessives par exemple.

rien de tout cela n'est clair, ni n'a de "bonnes réponses". Voir aussi les étiquettes" nlp "et" langage naturel".

bonne chance! Il s'agit d'un projet non négligeable.

5
répondu Gregg Lind 2008-10-20 23:21:44

D'accord. Vous avez donc un document contenant du texte et une collection de documents (un corpus). Il y a un certain nombre de façons de le faire.

je vous conseille D'utiliser le moteur Lucene (Java) pour indexer vos documents. Lucene soutient une structure de données (Index) qui maintient un certain nombre de documents en elle. Un document lui - même est une structure de données qui peut contenir des "champs" - par exemple, Auteur, Titre, texte, etc. Vous pouvez choisir quels champs sont indexés et ceux qui ne le sont pas.

ajouter des documents à un index est trivial . Lucene est également construit pour la vitesse, et peut superbement.

ensuite, vous voulez trouver les Termes et les fréquences. Puisque lucene a déjà calculé ceci pour vous pendant le processus d'indexation, vous pouvez utiliser soit la fonction docFreq et construire votre propre fonction de fréquence de terme, ou utiliser la fonction getTermFreqVectors de la classe IndexReader pour obtenir les Termes (et les fréquences) de celui-ci).

maintenant c'est à vous de le trier et quels critères vous voulez utiliser pour filtrer les mots que vous voulez. Pour comprendre les relations, vous pouvez utiliser une API Java vers la bibliothèque open source de wordnet. Pour trouver des mots, utilisez la classe PorterStemFilter de Lucene. La partie "importance de l'expression" est plus délicate, mais une fois que vous en êtes arrivé là - vous pouvez chercher des conseils sur la façon d'intégrer la recherche de n-gram dans Lucene (indice) .

bonne chance!

1
répondu viksit 2009-06-05 00:35:14

vous pouvez utiliser le service D'indexation de Windows, qui est fourni avec la plate-forme Windows SDK. Ou encore, il suffit de lire l'introduction suivante pour avoir un aperçu de la NLP.

http://msdn.microsoft.com/en-us/library/ms693179 (VS.85).aspx 151940920" http://i.msdn.microsoft.com/ms693179.wbr-index-create(en-us, VS.85).gif

http://i.msdn.microsoft.com/ms693179.wbr-query-process(en-us, VS.85).gif

1
répondu yogman 2009-10-29 18:32:51

cochez MapReduce model pour obtenir le nombre de mots et ensuite calculer la fréquence comme décrit dans tf-idf

Hadoop est un MapReduce Apache framework qui peut être utilisé pour la lourde tâche de levage de word count sur de nombreux documents. http://hadoop.apache.org/common/docs/current/mapred_tutorial.html

vous ne pouvez pas obtenir un seul cadre qui résoudrait tout ce que vous voulez. Vous devez choisir une bonne combinaison de concepts et de cadre pour obtenir ce que vous voulez.

0
répondu 2009-09-22 04:00:41

je voudrais aussi voir s'il y a un moyen d'identifier les phrases importantes. (Au lieu d'un nombre d'un mot, le comte de phrase étant 2-3 mots)

cette partie de votre problème s'appelle extraction de collocation . (Au moins si vous prenez importante des phrases " à des phrases qui apparaissent significativement plus souvent que par hasard.) I a donné une réponse plus à un autre SO question à propos de ce sous-problème spécifique.

0
répondu Darius Bacon 2017-05-23 12:30:29

il semble que ce que vous recherchez s'appelle le groupage/classification de documents en sacs de mots. Vous trouverez des conseils dans cette recherche.

0
répondu Josep Valls 2011-04-10 12:51:09