75 votes

Grammaire anglaise pour l'analyse syntaxique dans NLTK

Existe-t-il une grammaire anglaise prête à l'emploi que je peux simplement charger et utiliser dans NLTK ? J'ai cherché des exemples d'analyse avec NLTK, mais il semble que je doive spécifier manuellement la grammaire avant d'analyser une phrase.

Merci beaucoup !

33voto

emilmont Points 411

Vous pouvez consulter pyStatParser un simple analyseur statistique en python qui renvoie les arbres d'analyse de NLTK. Il est livré avec des banques d'arbres publiques et ne génère le modèle de grammaire que la première fois que vous instanciez un objet Parser (en 8 secondes environ). Il utilise un algorithme CKY et analyse des phrases de longueur moyenne (comme celle ci-dessous) en moins d'une seconde.

>>> from stat_parser import Parser
>>> parser = Parser()
>>> print parser.parse("How can the net amount of entropy of the universe be massively decreased?")
(SBARQ
  (WHADVP (WRB how))
  (SQ
    (MD can)
    (NP
      (NP (DT the) (JJ net) (NN amount))
      (PP
        (IN of)
        (NP
          (NP (NNS entropy))
          (PP (IN of) (NP (DT the) (NN universe))))))
    (VP (VB be) (ADJP (RB massively) (VBN decreased))))
  (. ?))

0 votes

Pour les utilisateurs de Python 3, il y a une pull request pour ajouter le support de Python 3 ici : github.com/emilmont/pyStatParser/pull/7 Je n'ai découvert cette pull request qu'après avoir utilisé la commande 2to3 pour convertir "manuellement" tous les fichiers de Python 2 à Python 3.

0 votes

Pour construire le modèle de grammaire et exécuter un exemple : python example.py avec le texte par défaut codé en dur. Très facile à utiliser et à intégrer.

0 votes

J'ai lancé les commandes suivantes pour pouvoir utiliser pyStatParser 2to3 --output-dir=stat_parser3 -W -n stat_parser rm star_parser mv stat_parser3 stat_parser setup.py build setup.py install et cela a fonctionné, merci @emilmont

26voto

syllogism_ Points 16

Ma bibliothèque, spaCy fournit un analyseur de dépendances très performant.

Installation :

pip install spacy
python -m spacy.en.download all

Utilisation :

from spacy.en import English
nlp = English()
doc = nlp(u'A whole document.\nNo preprocessing require.   Robust to arbitrary formating.')
for sent in doc:
    for token in sent:
        if token.is_alpha:
            print token.orth_, token.tag_, token.head.lemma_

Choi et al (2015) a trouvé que spaCy était l'analyseur de dépendances le plus rapide disponible. Il traite plus de 13 000 phrases par seconde, sur un seul thread. Sur l'évaluation standard du WSJ, il obtient un score de 92,7 %, soit une précision supérieure de plus de 1 % à celle de tous les modèles de CoreNLP.

6voto

larsmans Points 167484

Il existe quelques grammaires dans le nltk_data distribution. Dans votre interpréteur Python, lancez nltk.download() .

1 votes

Oui, mais ce n'est pas suffisant pour une condamnation arbitraire. Lorsque j'essaie une phrase au hasard, le système affiche "Grammar does not cover some of the input words : ...." Est-ce que je m'y prends mal ? Je veux obtenir un arbre d'analyse d'une phrase. Est-ce la bonne façon de procéder ? Je vous remercie.

6 votes

@roboren : vous pourriez prendre la partie Penn treebank en nltk_data et en déduire un CFG en transformant simplement les fragments d'arbre (un nœud et ses sous-nœuds directs) en règles. Mais vous ne trouverez probablement pas de "vraie" grammaire à moins de vous intéresser à l'analyse syntaxique statistique ; plus personne ne construit de grammaires non stochastiques car elles ne fonctionnent tout simplement pas, sauf pour des applications très spécifiques à un domaine.

2 votes

Le logiciel nltk permet-il l'analyse statistique ? Dans le cas contraire, je devrais peut-être passer à l'analyseur de Stanford. Encore une fois, merci beaucoup =)

6voto

user3798928 Points 11

Il existe une bibliothèque appelée Modèle . Il est assez rapide et facile à utiliser.

>>> from pattern.en import parse
>>>  
>>> s = 'The mobile web is more important than mobile apps.'
>>> s = parse(s, relations=True, lemmata=True)
>>> print s

'The/DT/B-NP/O/NP-SBJ-1/the mobile/JJ/I-NP/O/NP-SBJ-1/mobile' ...

1 votes

Il s'agit d'une sortie d'analyse superficielle (également appelée "chunking"). Je ne suis pas sûr que ce soit ce que l'OP recherche.

5voto

blackmamba Points 91

Utilisez le MaltParser, vous y trouverez une grammaire anglaise pré-entraînée, ainsi que d'autres langues pré-entraînées. Le Maltparser est un analyseur de dépendances et non un simple analyseur ascendant ou descendant.

Il suffit de télécharger le MaltParser à partir de http://www.maltparser.org/index.html et utiliser le NLTK comme suit :

import nltk
parser = nltk.parse.malt.MaltParser()

4 votes

MaltParser a l'air bien, mais je n'ai pas réussi à le faire fonctionner avec nltk (il échouait toujours avec le message "Couldn't find the MaltParser configuration file : malt_temp.mco". Le MaltParser lui-même fonctionne bien.

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