Comment dois-je faire à la dépendance de l'analyse en NLTK?
En passant par la NLTK livre, il n'est pas clair comment générer une dépendance de l'arbre à partir d'une phrase donnée.
La section pertinente du livre: sous-chapitre sur la dépendance de la grammaire donne un exemple la figure mais il ne montre pas comment analyser une phrase à venir avec ces relations - ou peut-être que je suis absent quelque chose de fondamental dans la PNL?
EDIT:
Je veux quelque chose de semblable à ce que le stanford parser n':
Une phrase "j'ai tué un éléphant dans mon sommeil", il doit retourner quelque chose comme:
nsubj(shot-2, I-1)
det(elephant-4, an-3)
dobj(shot-2, elephant-4)
prep(shot-2, in-5)
poss(sleep-7, my-6)
pobj(in-5, sleep-7)
- Vous pouvez consulter cet exemple. NLTK ne prend pas en charge le type de dépendance.
Vous devez vous connecter pour publier un commentaire.
Nous pouvons utiliser Stanford Parser de NLTK.
Exigences
Vous devez télécharger deux choses à partir de leur site web:
Attention!
Assurez-vous que votre modèle de langue de la version correspondant à votre Stanford CoreNLP analyseur version!
L'actuel CoreNLP version du 22 Mai 2018 est 3.9.1.
Après avoir téléchargé les deux fichiers, extraire le fichier zip n'importe où vous le souhaitez.
Code Python
Ensuite, chargez le modèle et l'utiliser par le biais de NLTK
De sortie
La sortie de la dernière ligne est:
Je pense que c'est ce que vous voulez.
next()
sur listiterater renvoie une erreur, l'installation degraphviz
résolu le problèmeJe pense que vous pouvez utiliser un corpus basé sur la dépendance de l'analyseur à la place de la grammaire basée sur un NLTK fournit.
Faire basé sur un corpus de dépendance analyse sur un même une petite quantité de texte en Python n'est pas l'idéal en terme de performance. Ainsi, dans NLTK, ils ne fournissent un wrapper à MaltParser, un corpus en fonction de la dépendance de l'analyseur.
Vous pourriez trouver cette autre question au sujet de Représentation RDF de phrases pertinentes.
Si vous avez besoin d'une meilleure performance, alors spacy (https://spacy.io/) est le meilleur choix. L'utilisation est très simple:
Vous obtiendrez une dépendance de l'arbre de sortie, et vous pouvez creuser très facilement toutes les informations dont vous avez besoin. Vous pouvez également définir vos propres conduites. En voir plus sur leur site web.
https://spacy.io/docs/usage/
Si vous voulez être sérieux au sujet de la dépendance, l'analyse n'utilisez pas le NLTK, tous les algorithmes sont datés, et lent. Essayez quelque chose comme ceci: https://spacy.io/
À utiliser Stanford Parser de NLTK
1) Exécuter CoreNLP Server at localhost
Télécharger Stanford CoreNLP ici (et aussi le modèle de fichier pour votre langue).
Le serveur peut être démarré en exécutant la commande suivante (pour plus de détails ici)
ou par NLTK API (besoin de configurer le
CORENLP_HOME
variable d'environnement en premier)2) Appel de la dépendance de l'analyseur de NLTK
Voir le détail la documentation ici, aussi cette question NLTK CoreNLPDependencyParser: Impossible d'établir la connexion.
De la Stanford Parser documentation: "les dépendances peuvent être obtenues à l'aide de notre logiciel [...] dans la phrase, la structure des arbres à l'aide de la EnglishGrammaticalStructure classe disponible dans l'analyseur de paquet." http://nlp.stanford.edu/software/stanford-dependencies.shtml
Les dépendances manuel mentionne également: "Ou notre outil de conversion peut convertir les
sortie d'autres circonscription analyseurs de Stanford Dépendances de la représentation." http://nlp.stanford.edu/software/dependencies_manual.pdf
Ni les fonctionnalités semblent être mis en œuvre dans NLTK actuellement.
Un peu en retard à la fête, mais je voulais ajouter un exemple de code avec SpaCy qui vous obtient votre sortie désirée:
Et voici la sortie, très similaire à la sortie souhaitée:
Espère que ça aide!