web-dev-qa-db-fra.com

Grammaire anglaise pour l'analyse en NLTK

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

Merci beaucoup!

61
roboren

Vous pouvez jeter un œil à pyStatParser , un simple python analyseur statistique qui retourne des arbres d'analyse NLTK. Il est fourni avec des arborescences publiques et il ne génère le modèle de grammaire que la première fois. vous instanciez un objet Parser (en environ 8 secondes). Il utilise un algorithme CKY et il analyse les 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))))
  (. ?))
31
emilmont

Ma bibliothèque, spaCy , fournit un analyseur de dépendances hautes performances.

Installation:

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

Usage:

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épendance le plus rapide disponible. Il traite plus de 13 000 phrases par seconde, sur un seul thread. Sur l'évaluation WSJ standard, il obtient 92,7%, plus de 1% plus précis que tous les modèles de CoreNLP.

21
syllogism_

Il existe une bibliothèque appelée Pattern . 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' ... 
7
user3798928

Il y a quelques grammaires dans la distribution nltk_data . Dans votre interpréteur Python, exécutez nltk.download().

5
Fred Foo

J'ai essayé NLTK, PyStatParser, Pattern. IMHO Pattern est le meilleur analyseur anglais présenté dans l'article ci-dessus. Parce qu'il prend en charge l'installation de pip et Il existe un document de fantaisie sur le site Web ( http://www.clips.ua.ac.be/pages/pattern-en ). Je n'ai pas pu trouver de document raisonnable pour NLTK (Et cela m'a donné un résultat inexact pour moi par défaut. Et je n'ai pas trouvé comment le régler). pyStatParser est beaucoup plus lent que décrit ci-dessus dans mon environnement. (Environ une minute pour l'initialisation et il a fallu quelques secondes pour analyser de longues phrases. Peut-être que je ne l'ai pas utilisé correctement).

4
Piyo Hoge

Utilisez MaltParser, vous avez là une grammaire anglaise pré-formée, et aussi quelques autres langues pré-formées. Et le Maltparser est un analyseur de dépendances et non un simple analyseur ascendant ou descendant.

Téléchargez simplement MaltParser à partir de http://www.maltparser.org/index.html et utilisez le NLTK comme ceci:

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

Avez-vous essayé le balisage POS en NLTK?

text = Word_tokenize("And now for something completely different")
nltk.pos_tag(text)

La réponse est quelque chose comme ça

[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'),('completely', 'RB'), ('different', 'JJ')]

Vous avez cet exemple d'ici NLTK_chapter

3
maverik_akagami