Gitter est une salle de chat pour les développeurs.
nlpnet --- Traitement du langage naturel avec des réseaux de neurones nlpnet est une bibliothèque Python pour les tâches de traitement du langage naturel basées sur les réseaux de neurones. Actuellement, il effectue un étiquetage d'une partie du discours, un étiquetage des rôles sémantique et une analyse de dépendance. La majeure partie de l'architecture est indépendante du langage, mais certaines fonctions étaient spécialement adaptées pour travailler avec Portugais. Ce système a été inspiré par Senna.
IMPORTANT: Pour utiliser les modèles formés pour la NLP portugaise, vous devrez télécharger les données à partir de http://nilc.icmc.usp.br/nlpnet/models.html.
nlpnet nécessite NLTK et Numpy. De plus, il doit télécharger certaines données de NLTK. Après l'avoir installé, appelez
>>> nltk.download()
Accédez à l'onglet Modèles et sélectionnez le tokenzer Punkt. Il est utilisé pour diviser le texte en phrases.
Le cython est utilisé pour générer des extensions C et fonctionner plus rapidement. Vous n'en aurez probablement pas besoin, car le fichier .c généré est déjà fourni avec NLPNET, mais vous aurez besoin d'un compilateur C. Sur les systèmes Linux et Mac, cela ne devrait pas être un problème, mais peut être sur Windows, car Setuptools nécessite le compilateur Microsoft C par défaut. Si vous ne l'avez pas déjà, il est généralement plus facile d'installer Mingw à la place et de suivre les instructions ici.
nlpnet peut être utilisé à la fois comme bibliothèque Python ou par ses scripts autonomes. Les deux usages sont expliqués ci-dessous.
Vous pouvez utiliser nlpnet comme bibliothèque en code Python comme suit:
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]] Dans l'exemple ci-dessus, le constructeur POSTagger reçoit comme premier argument le répertoire où se trouve son modèle formé. Le deuxième argument est le code linguistique à deux lettres (actuellement, Onle pt et en sont pris en charge). Cela n'a qu'un impact sur la tokenisation.
Appeler un outil d'annotation est assez simple. Les fournisseurs sont POSTagger , SRLTagger et DependencyParser , tous ayant une tag de méthode qui reçoit des chaînes avec du texte à marquer (dans DependencyParser , il y a un alias à l' parse de la méthode, qui semble plus adéquate). Le tagger divise le texte en phrases puis tokenise chacun (d'où le retour de l'osbagger est une liste de listes).
La sortie du srltagger est légèrement plus compliquée:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
Au lieu d'une liste de tuples, les phrases sont représentées par des instances de SRLAnnotatedSentence . Cette classe sert essentiellement de titulaire de données et a deux attributs:
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
L' arg_structures est une liste contenant toutes les structures de prédicat-argument dans la phrase. Le seul dans cet exemple est pour le verbe roeu. Il est représenté par un tuple avec le prédicat et un dictionnaire cartographier le rôle sémantique étiquette aux jetons qui constituent l'argument.
Notez que le verbe apparaît comme le premier membre du tuple et également comme le contenu de l'étiquette «V» (qui signifie Verbe). En effet, certains prédicats sont plusieurs mots. Dans ces cas, le mot de prédicat "principal" (généralement le verbe lui-même) apparaît dans arg_structures[0] , et tous les mots apparaissent sous la clé «V».
Voici un exemple avec la dépendance:
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
La méthode to_conll() d'objets ParseDentence les imprime dans la notation de conll. Les jetons, les étiquettes et les indices de tête sont accessibles par le biais de variables membres:
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
La variable de membre heads est un tableau Numpy. La i-tth position dans le tableau contient l'indice de la tête du token i-th, à l'exception du jeton racine, qui a une tête de -1. Notez que ces indices sont basés sur 0, tandis que ceux affichés dans la fonction to_conll() sont basés sur 1.
nlpnet fournit également des scripts pour le marquage du texte, la formation de nouveaux modèles et les tester. Ils sont copiés dans le sous-répertoire des scripts de votre installation Python, qui peut être inclus dans la variable de chemin du système. Vous pouvez les appeler à partir de la ligne de commande et donner une entrée de texte.
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU Si --data n'est pas donné, le script recherchera les modèles formés dans le répertoire actuel. --lang par défaut à en . Si vous avez déjà du texte, vous pouvez utiliser l'option -t ; Il suppose que les jetons sont séparés par des espaces blancs.
Avec étiquetage des rôles sémantiques:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeuLa première ligne a été tapée par l'utilisateur, et le second est le résultat de la tokenisation.
Et analyse de dépendance:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 PPour en savoir plus sur la formation et le test de nouveaux modèles et autres fonctionnalités, reportez-vous à la documentation sur http://nilc.icmc.usp.br/nlpnet
Les références suivantes décrivent la conception de NLPNET, ainsi que des expériences réalisées. Certaines améliorations du code ont été mises en œuvre depuis leur publication.