Je cherche à faire une analyse de phrase (principalement pour les applications Twitter) et à déduire certaines caractéristiques générales. Existe-t-il de bonnes bibliothèques de traitement du langage naturel pour ce genre de choses dans Ruby?
Similaire à Existe-t-il une bonne bibliothèque de traitement du langage naturel mais pour Ruby. Je préfère quelque chose de très général, mais toutes les pistes sont appréciées!
Il y a certaines choses à Ruby Linguistics et quelques liens à partir de cela, bien qu'il ne semble pas du tout proche de ce que NLTK est pour Python , encore.
Trois packages NLP excellents et matures sont Stanford Core NLP , Open NLP et LingPipe . Il existe des liaisons Ruby aux outils Stanford Core NLP (licence GPL) ainsi qu'aux outils OpenNLP (licence Apache).
Sur le côté plus expérimental des choses, je maintiens un Text Retrieval, Extraction and Annotation Toolkit (Treat), publié sous la GPL, qui fournit une API commune pour presque tous les joyaux liés à la PNL qui existent pour Ruby . La liste suivante des fonctionnalités de Treat peut également servir de bonne référence en termes de gemmes de traitement du langage naturel stables compatibles avec Ruby 1.9.
punkt-segmenter
, tactful_tokenizer
, srx-english
, scalpel
)stanford-core-nlp
).linguistics
), stemming (Ruby-stemmer
, uea-stemmer
, lingua
, etc.)rwordnet
), étiqueteurs POS (rbtagger
, engtagger
, etc.)whatlanguage
), date/heure (chronic
, kronic
, nickel
), mot-clé (lda-Ruby
) extraction.ferret
).stanford-core-nlp
).decisiontree
), MLP (Ruby-fann
), SVM (rb-libsvm
) et la classification linéaire (tomz-liblinear-Ruby-swig
).levenshtein-ffi
, fuzzy-string-match
, tf-idf-similarity
).Non inclus dans Treat, mais pertinent pour la PNL: eau chaude (algorithmes de distance de chaîne), yom (liants vers Apache Tiki pour lire .doc, .docx, .pages, .odt , .rtf, .pdf), graph-rank (une implémentation de GraphRank).
Vous pouvez toujours utiliser jruby et utiliser les bibliothèques Java.
EDIT: La possibilité de faire Ruby en natif sur le jvm et d'exploiter facilement Java sont un gros plus pour les rubyists. C'est une bonne option qui devrait être considérée dans une situation comme celle-ci.
J'ai trouvé un excellent article détaillant certains algorithmes PNL dans Ruby ici . Cela inclut les stemmers, les analyseurs de date et d'heure et les analyseurs de grammaire).
TREAT - la boîte à outils de récupération et d'annotation de texte - est la boîte à outils la plus complète que je connaisse pour Ruby: https://github.com/louismullie/treat/wiki/
Pensez également à utiliser SaaS API comme MonkeyLearn . Vous pouvez facilement former des classificateurs de texte avec l'apprentissage automatique et les intégrer via une API. Il y a Ruby SDK disponible.
En plus de créer vos propres classificateurs, vous pouvez choisir des modules pré-créés pour l'analyse des sentiments, la classification des sujets, la détection de la langue et plus encore. Nous avons également des extracteurs comme l'extraction de mots clés et des entités, et nous continuerons d'ajouter des modules publics.
Autres fonctionnalités intéressantes:
Je maintiens une liste de ressources Ruby Natural Language Processing (bibliothèques, API et présentations) sur GitHub qui couvre les bibliothèques répertoriées dans les autres réponses ici ainsi que quelques bibliothèques supplémentaires.
Essaye celui-là
https://github.com/louismullie/stanford-core-nlp
À propos de Stanford-Core-NLP Gem
Ce joyau fournit des liaisons de haut niveau Ruby avec le package NLP de Stanford Core, un ensemble d'outils de traitement du langage naturel pour la tokenisation, la segmentation des phrases, le balisage d'une partie du discours, la lemmatisation et l'analyse de l'anglais, Français et allemand Le package fournit également la reconnaissance d'entités nommées et la résolution de coréférence pour l'anglais.
http://nlp.stanford.edu/software/corenlp.shtml page de démonstration http://nlp.stanford.edu:8080/corenlp/
Vous devez être beaucoup plus précis sur ces "caractéristiques générales".
Dans la PNL, les "caractéristiques générales" d'une phrase peuvent signifier un million de choses différentes - analyse des sentiments (c'est-à-dire l'attitude du locuteur), partie de base du balisage de la parole, utilisation du pronom personnel, la phrase contient-elle des verbes actifs ou passifs, quel est le tendu et voix des verbes ...
Cela ne me dérange pas si vous êtes vague à propos de le décrire, mais si nous ne savons pas ce que vous demandez, il est très peu probable que nous puissions être précis en vous aidant.
Ma suggestion générale, en particulier pour la PNL, est que vous devriez obtenir l'outil le mieux conçu pour le travail au lieu de vous limiter à une langue spécifique. Se limiter à un langage spécifique est bien pour certaines tâches où les outils généraux sont implémentés partout, mais la PNL n'est pas de ceux-là.
L'autre problème en travaillant avec Twitter est une grande partie des phrases qui seront à moitié cuites ou compressées de manière étrange et merveilleuse - pour lesquelles la plupart des outils de PNL ne sont pas formés. Pour y aider, le NUS SMS Corpus se compose de "environ 10 000 SMS messages collectés par les étudiants". En raison des restrictions similaires et l'utilisation, l'analyse qui peut être utile dans vos explorations avec Twitter.
Si vous êtes plus précis, je vais essayer de lister quelques outils qui vous aideront.
Pour les personnes à la recherche de quelque chose de plus léger et simple à mettre en œuvre, cette option a bien fonctionné pour moi.
Je voudrais consulter le livre gratuit de Mark Watson Web sémantique pratique et applications de données liées, Java, Scala, Clojure et JRuby Edition . Il a des chapitres sur la PNL en utilisant Java, clojure, Ruby et scala. Il fournit également des liens vers les ressources dont vous avez besoin.