Ce lien doit être plus visible. Peut-être que la première réponse devrait être modifiée pour mentionner cela?
Lalo Sánchez
1
Juste un petit mot ici les gars. Assurez-vous que votre Java est à jour pour Stanford NLP et que JAVA_HOME est correctement configuré. Parfois, les gens peuvent avoir des erreurs "étranges" qui pourraient être dues à cela.
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Bien sûr, essayez ce qui suit en Python:
import osfrom nltk.parse import stanford
os.environ['STANFORD_PARSER']='/path/to/standford/jars'
os.environ['STANFORD_MODELS']='/path/to/standford/jars'
parser = stanford.StanfordParser(model_path="/location/of/the/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.","What is your name?"))print sentences# GUIfor line in sentences:for sentence in line:
sentence.draw()
Production:
[Tree ('ROOT', [Tree ('S' ', [Tree (' INTJ '', [Tree ('UH' ', [' Hello '])]), Tree (', ', [', ']), Tree ('NP', [Tree ('PRP $' ', [' My ']), Tree (' NN ', [' name '])]), Tree (' VP ', [Tree (' VBZ ', [ 'est']), Tree ('ADJP', [Tree ('JJ', ['Melroy'])])]), Tree ('.', ['.'])])]), Tree (' ROOT ', [Tree (' SBARQ ', [Tree (' WHNP ', [Tree (' WP '', ['What'])]), Tree ('SQ', [Tree ('VBZ', ['is' ]), Tree ('NP', [Tree ('PRP $', ['your']), Tree ('NN', ['name'])])]), Tree ('.', ['? '])])])]
Remarque 1:
Dans cet exemple, l'analyseur et les fichiers JAR du modèle se trouvent dans le même dossier.
Note 2:
Le nom de fichier de stanford parser est: stanford-parser.jar
Le nom de fichier des modèles stanford est: stanford-parser-xxx-models.jar
Remarque 3:
Le fichier englishPCFG.ser.gz se trouve dans le fichier models.jar (/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz). Veuillez utiliser le gestionnaire d'archives come pour «décompresser» le fichier models.jar.
Remarque 4:
assurez-vous que vous utilisez Java JRE (Runtime Environment) 1.8 également connu sous le nom d'Oracle JDK 8. Sinon, vous obtiendrez: Unsupported major.minor version 52.0.
Extrayez le fichier standford-parser-full-20xx-xx-xx.zip.
Créez un nouveau dossier ('jars' dans mon exemple). Placez les fichiers extraits dans ce dossier jar: stanford-parser-3.xx-models.jar et stanford-parser.jar.
Comme indiqué ci-dessus, vous pouvez utiliser les variables d'environnement (STANFORD_PARSER & STANFORD_MODELS) pour pointer vers ce dossier 'jars'. J'utilise Linux, donc si vous utilisez Windows, veuillez utiliser quelque chose comme: C: // dossier // jars.
Ouvrez le fichier stanford-parser-3.xx-models.jar à l'aide d'un gestionnaire d'archives (7zip).
Naviguez dans le fichier jar; edu / stanford / nlp / models / lexparser. Encore une fois, extrayez le fichier appelé «englishPCFG.ser.gz». Souvenez-vous de l'emplacement où vous extrayez ce fichier ser.gz.
Lors de la création d'une instance StanfordParser, vous pouvez fournir le chemin du modèle en tant que paramètre. C'est le chemin complet vers le modèle, dans notre cas /location/of/englishPCFG.ser.gz.
Essayez mon exemple! (n'oubliez pas de changer les chemins de jar et de changer le chemin du modèle à l'emplacement ser.gz)
Quelle version du nltk ajoutée nltk.parse.stanford? Je n'ai que nltk.tag.stanforddans NLTK 2.0.4.
alexis
1
AttributeError: 'StanfordParser' object has no attribute 'raw_batch_parse'
Nick Retallack
5
@alexis: téléchargez nltk 3.0 à partir d' ici @Nick Retallack: il devrait être changé enraw_parse_sents()
Rasika Perera
1
OK tu as raison. NLTK change la fonction en: raw_parse_sents (). Voir documentation: nltk.org/_modules/nltk/parse/stanford.html Si vous utilisez raw_parse (), vous récupérerez un iter (Tree) comme valeur de retour. Cela signifie que l'exemple ci-dessus de draw () devrait fonctionner. Si vous utilisez raw_parse_sents (), vous avez apparemment besoin d'une double boucle; il renvoie un iter (iter (Tree)). Exemple de code: for line in sentences: for sentence in line: sentence.draw() vous ne pouvez exécuter draw () que sur un objet Tree;)
danger89
1
@ danger89, désolé d'avoir écrasé votre réponse avec la note MODIFIÉE. Récemment, des gens se sont plaints du fait que l'analyseur de dépendance de Stanford n'a été ajouté que récemment depuis NLTK v3.1 et je pense qu'ils dupliquaient des extraits de code ici et là à partir des réponses obsolètes ici. Donc, pour minimiser la confusion, j'ai pensé qu'il était préférable d'ajouter des clauses de non-responsabilité à toutes les réponses ici en ce qui concerne le respect des instructions de la NLTK official 3rd party toolsdocumentation.
Remarque: La réponse suivante ne fonctionnera que sur:
Version NLTK> = 3.2.4
Stanford Tools compilé depuis le 20/04/2015
Python 2.7, 3.4 et 3.5 (Python 3.6 n'est pas encore officiellement pris en charge)
Comme les deux outils changent assez rapidement et que l'API peut sembler très différente 3 à 6 mois plus tard. Veuillez traiter la réponse suivante comme une solution temporelle et non éternelle.
cd $HOME# Update / Install NLTK
pip install -U nltk# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip# Extract the zip file.
unzip stanford-ner-2015-04-20.zip
unzip stanford-parser-full-2015-04-20.zip
unzip stanford-postagger-full-2015-04-20.zip
export STANFORDTOOLSDIR=$HOME
export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers
Ensuite:
>>>from nltk.tag.stanford importStanfordPOSTagger>>> st =StanfordPOSTagger('english-bidirectional-distsim.tagger')>>> st.tag('What is the airspeed of an unladen swallow ?'.split())[(u'What', u'WP'),(u'is', u'VBZ'),(u'the', u'DT'),(u'airspeed', u'NN'),(u'of', u'IN'),(u'an', u'DT'),(u'unladen', u'JJ'),(u'swallow', u'VB'),(u'?', u'.')]>>>from nltk.tag importStanfordNERTagger>>> st =StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())[(u'Rami', u'PERSON'),(u'Eid', u'PERSON'),(u'is', u'O'),(u'studying', u'O'),(u'at', u'O'),(u'Stony', u'ORGANIZATION'),(u'Brook', u'ORGANIZATION'),(u'University', u'ORGANIZATION'),(u'in', u'O'),(u'NY', u'O')]>>>from nltk.parse.stanford importStanfordParser>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))[Tree('ROOT',[Tree('NP',[Tree('NP',[Tree('DT',['the']),Tree('JJ',['quick']),Tree('JJ',['brown']),Tree('NN',['fox'])]),Tree('NP',[Tree('NP',[Tree('NNS',['jumps'])]),Tree('PP',[Tree('IN',['over']),Tree('NP',[Tree('DT',['the']),Tree('JJ',['lazy']),Tree('NN',['dog'])])])])])])]>>>from nltk.parse.stanford importStanfordDependencyParser>>> dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")>>>print[parse.tree()for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")][Tree('jumps',[Tree('fox',['The','quick','brown']),Tree('dog',['over','the','lazy'])])]
En long:
Tout d'abord , il faut noter que les outils de Stanford NLP sont écrits en Java et NLTK est écrit en Python . La façon dont NLTK interagit avec l'outil consiste à appeler l'outil Java via l'interface de ligne de commande.
Deuxièmement , l' NLTKAPI des outils PNL de Stanford a beaucoup changé depuis la version 3.1. Il est donc conseillé de mettre à jour votre package NLTK vers la v3.1.
( Remarque : les importations ci-dessus garantiront UNIQUEMENT que vous utilisez une version NLTK correcte contenant ces API. Ne pas voir d'erreurs dans l'importation ne signifie pas que vous avez correctement configuré l'API NLTK pour utiliser les outils de Stanford)
ÉTAPE 2
Maintenant que vous avez vérifié que vous disposez de la version correcte de NLTK qui contient l'interface des outils Stanford NLP nécessaire. Vous devez télécharger et extraire tous les outils NLP Stanford nécessaires.
TL; DR , sous Unix:
cd $HOME
# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip# Extract the zip file.
unzip stanford-ner-2015-04-20.zip
unzip stanford-parser-full-2015-04-20.zip
unzip stanford-postagger-full-2015-04-20.zip
Configurez les variables d'environnement de sorte que NLTK puisse trouver automatiquement le chemin du fichier approprié. Vous devez définir les variables suivantes:
Ajoutez le .jarfichier NLP Stanford approprié à la CLASSPATHvariable d'environnement.
par exemple pour le NER, ce sera stanford-ner-2015-04-20/stanford-ner.jar
par exemple pour le POS, ce sera stanford-postagger-full-2015-04-20/stanford-postagger.jar
par exemple pour l'analyseur, ce sera stanford-parser-full-2015-04-20/stanford-parser.jarle fichier jar et le modèle de l'analyseur,stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
Ajoutez le répertoire de modèle approprié à la STANFORD_MODELSvariable (c'est-à-dire le répertoire où vous pouvez trouver où les modèles pré-entraînés sont enregistrés)
par exemple pour le NER, ce sera dans stanford-ner-2015-04-20/classifiers/
par exemple pour le POS, ce sera dans stanford-postagger-full-2015-04-20/models/
par exemple pour l'analyseur, il n'y aura pas de répertoire de modèle.
Dans le code, voyez qu'il recherche le STANFORD_MODELSrépertoire avant d'ajouter le nom du modèle. Voir aussi que, l'API essaie également automatiquement de rechercher dans les environnements OS pour le `CLASSPATH )
Notez qu'à partir de NLTK v3.1, les STANFORD_JARvariables sont obsolètes et ne sont PLUS utilisées . Les extraits de code trouvés dans les questions Stackoverflow suivantes peuvent ne pas fonctionner:
Vous DEVEZ définir les variables comme ci-dessus avant de démarrer python, puis:
>>>from nltk.tag.stanford importStanfordPOSTagger>>> st =StanfordPOSTagger('english-bidirectional-distsim.tagger')>>> st.tag('What is the airspeed of an unladen swallow ?'.split())[(u'What', u'WP'),(u'is', u'VBZ'),(u'the', u'DT'),(u'airspeed', u'NN'),(u'of', u'IN'),(u'an', u'DT'),(u'unladen', u'JJ'),(u'swallow', u'VB'),(u'?', u'.')]>>>from nltk.tag importStanfordNERTagger>>> st =StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())[(u'Rami', u'PERSON'),(u'Eid', u'PERSON'),(u'is', u'O'),(u'studying', u'O'),(u'at', u'O'),(u'Stony', u'ORGANIZATION'),(u'Brook', u'ORGANIZATION'),(u'University', u'ORGANIZATION'),(u'in', u'O'),(u'NY', u'O')]>>>from nltk.parse.stanford importStanfordParser>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))[Tree('ROOT',[Tree('NP',[Tree('NP',[Tree('DT',['the']),Tree('JJ',['quick']),Tree('JJ',['brown']),Tree('NN',['fox'])]),Tree('NP',[Tree('NP',[Tree('NNS',['jumps'])]),Tree('PP',[Tree('IN',['over']),Tree('NP',[Tree('DT',['the']),Tree('JJ',['lazy']),Tree('NN',['dog'])])])])])])]
Vous pouvez également essayer d'ajouter les variables d'environnement à l'intérieur de python, comme l'ont suggéré les réponses précédentes, mais vous pouvez également dire directement à l'analyseur / tagueur de s'initialiser sur le chemin direct où vous avez conservé le .jarfichier et vos modèles.
Il n'est PAS nécessaire de définir les variables d'environnement si vous utilisez la méthode suivante MAIS lorsque l'API change ses noms de paramètres, vous devrez changer en conséquence. C'est pourquoi il est PLUS conseillé de définir les variables d'environnement que de modifier votre code python pour l'adapter à la version NLTK.
Par exemple ( sans définir de variables d'environnement ):
# POS tagging:from nltk.tag importStanfordPOSTagger
stanford_pos_dir ='/home/alvas/stanford-postagger-full-2015-04-20/'
eng_model_filename= stanford_pos_dir +'models/english-left3words-distsim.tagger'
my_path_to_jar= stanford_pos_dir +'stanford-postagger.jar'
st =StanfordPOSTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar)
st.tag('What is the airspeed of an unladen swallow ?'.split())# NER Tagging:from nltk.tag importStanfordNERTagger
stanford_ner_dir ='/home/alvas/stanford-ner/'
eng_model_filename= stanford_ner_dir +'classifiers/english.all.3class.distsim.crf.ser.gz'
my_path_to_jar= stanford_ner_dir +'stanford-ner.jar'
st =StanfordNERTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar)
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())# Parsing:from nltk.parse.stanford importStanfordParser
stanford_parser_dir ='/home/alvas/stanford-parser/'
eng_model_path = stanford_parser_dir +"edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir +"stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir +"stanford-parser.jar"
parser=StanfordParser(model_path=eng_model_path, path_to_models_jar=my_path_to_models_jar, path_to_jar=my_path_to_jar)
À partir de l'analyseur de Stanford actuel (20/04/2015), la sortie par défaut pour le lexparser.sha changé et le script ci-dessous ne fonctionnera pas.
Je vous suggère de ne pas jouer avec Jython, JPype. Laisser python faire des trucs python et laisser java faire des trucs java, obtenir la sortie de Stanford Parser via la console.
Après avoir installé le Stanford Parser dans votre répertoire personnel ~/, utilisez simplement cette recette python pour obtenir l'analyse entre crochets plats:
import os
sentence ="this is a foo bar i want to parse."
os.popen("echo '"+sentence+"' > ~/stanfordtemp.txt")
parser_out = os.popen("~/stanford-parser-2012-11-12/lexparser.sh ~/stanfordtemp.txt").readlines()
bracketed_parse =" ".join([i.strip()for i in parser_out if i.strip()[0]=="("])print bracketed_parse
Cela a fonctionné pour moi, sauf que je devais ajouter une condition à vérifier, len(i.strip()) > 0sinon j'ai eu une erreur d'index. Je suppose que la sortie de mon analyseur avait au moins une ligne qui était purement un espace blanc.
Soyez prudent avec cela. Si votre entrée contient des 's, vous obtiendrez des erreurs étranges. Il existe de meilleures façons d'appeler les choses sur la ligne de commande
Nick Garvey
20
À partir de NLTK v3.3, les utilisateurs doivent éviter les marqueurs Stanford NER ou POS nltk.taget éviter le tokenizer / segmenter Stanford nltk.tokenize.
Utilisez plutôt la nouvelle nltk.parse.corenlp.CoreNLPParserAPI.
(En évitant la réponse aux liens uniquement, j'ai collé les documents du wiki NLTK github ci-dessous)
Tout d'abord, mettez à jour votre NLTK
pip3 install -U nltk # Make sure is >=3.3
Ensuite, téléchargez les packages CoreNLP nécessaires:
cd ~
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2018-02-27.zip
unzip stanford-corenlp-full-2018-02-27.zip
cd stanford-corenlp-full-2018-02-27# Get the Chinese model
wget http://nlp.stanford.edu/software/stanford-chinese-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-chinese.properties
# Get the Arabic model
wget http://nlp.stanford.edu/software/stanford-arabic-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-arabic.properties
# Get the French model
wget http://nlp.stanford.edu/software/stanford-french-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-french.properties
# Get the German model
wget http://nlp.stanford.edu/software/stanford-german-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-german.properties
# Get the Spanish model
wget http://nlp.stanford.edu/software/stanford-spanish-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-spanish.properties
Anglais
Toujours dans le stanford-corenlp-full-2018-02-27répertoire, démarrez le serveur:
>>>from nltk.parse importCoreNLPParser# Lexical Parser>>> parser =CoreNLPParser(url='http://localhost:9000')# Parse tokenized text.>>> list(parser.parse('What is the airspeed of an unladen swallow ?'.split()))[Tree('ROOT',[Tree('SBARQ',[Tree('WHNP',[Tree('WP',['What'])]),Tree('SQ',[Tree('VBZ',['is']),Tree('NP',[Tree('NP',[Tree('DT',['the']),Tree('NN',['airspeed'])]),Tree('PP',[Tree('IN',['of']),Tree('NP',[Tree('DT',['an']),Tree('JJ',['unladen'])])]),Tree('S',[Tree('VP',[Tree('VB',['swallow'])])])])]),Tree('.',['?'])])])]# Parse raw string.>>> list(parser.raw_parse('What is the airspeed of an unladen swallow ?'))[Tree('ROOT',[Tree('SBARQ',[Tree('WHNP',[Tree('WP',['What'])]),Tree('SQ',[Tree('VBZ',['is']),Tree('NP',[Tree('NP',[Tree('DT',['the']),Tree('NN',['airspeed'])]),Tree('PP',[Tree('IN',['of']),Tree('NP',[Tree('DT',['an']),Tree('JJ',['unladen'])])]),Tree('S',[Tree('VP',[Tree('VB',['swallow'])])])])]),Tree('.',['?'])])])]# Neural Dependency Parser>>>from nltk.parse.corenlp importCoreNLPDependencyParser>>> dep_parser =CoreNLPDependencyParser(url='http://localhost:9000')>>> parses = dep_parser.parse('What is the airspeed of an unladen swallow ?'.split())>>>[[(governor, dep, dependent)for governor, dep, dependent in parse.triples()]for parse in parses][[(('What','WP'),'cop',('is','VBZ')),(('What','WP'),'nsubj',('airspeed','NN')),(('airspeed','NN'),'det',('the','DT')),(('airspeed','NN'),'nmod',('swallow','VB')),(('swallow','VB'),'case',('of','IN')),(('swallow','VB'),'det',('an','DT')),(('swallow','VB'),'amod',('unladen','JJ')),(('What','WP'),'punct',('?','.'))]]# Tokenizer>>> parser =CoreNLPParser(url='http://localhost:9000')>>> list(parser.tokenize('What is the airspeed of an unladen swallow?'))['What','is','the','airspeed','of','an','unladen','swallow','?']# POS Tagger>>> pos_tagger =CoreNLPParser(url='http://localhost:9000', tagtype='pos')>>> list(pos_tagger.tag('What is the airspeed of an unladen swallow ?'.split()))[('What','WP'),('is','VBZ'),('the','DT'),('airspeed','NN'),('of','IN'),('an','DT'),('unladen','JJ'),('swallow','VB'),('?','.')]# NER Tagger>>> ner_tagger =CoreNLPParser(url='http://localhost:9000', tagtype='ner')>>> list(ner_tagger.tag(('Rami Eid is studying at Stony Brook University in NY'.split())))[('Rami','PERSON'),('Eid','PERSON'),('is','O'),('studying','O'),('at','O'),('Stony','ORGANIZATION'),('Brook','ORGANIZATION'),('University','ORGANIZATION'),('in','O'),('NY','STATE_OR_PROVINCE')]
chinois
Démarrez le serveur un peu différemment, toujours à partir du répertoire `stanford-corenlp-full-2018-02-27:
>>> pos_tagger =CoreNLPParser('http://localhost:9003', tagtype='pos')>>> pos_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())[('Barack','PROPN'),('Obama','PROPN'),('salió','VERB'),('con','ADP'),('Michael','PROPN'),('Jackson','PROPN'),('.','PUNCT')]>>> ner_tagger =CoreNLPParser('http://localhost:9003', tagtype='ner')>>> ner_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())[('Barack','PERSON'),('Obama','PERSON'),('salió','O'),('con','O'),('Michael','PERSON'),('Jackson','PERSON'),('.','O')]
Merci, c'est très utile. L'analyse arabe n'est cependant pas correcte. Il divise le texte en lettres au lieu de mots
Labibah
Utilisez list(parser.raw_parse(text))ou list(parser.parse(parser.tokenize(text)). Correction de l'exemple;)
alvas
1
Je ne peux pas croire que ce n'est pas plus annoncé !!
Nimitz14
1
Malheureusement, NLTK n'a pas assez de personnes qui se déplacent pour donner des conférences ou qui n'ont pas les ressources nécessaires pour organiser une conférence de développement chic pour promouvoir l'outil = (N'hésitez pas à présenter cette fonctionnalité ou NLTK à la communauté autour de vous.
alvas
7
Il existe une interface python pour l'analyseur de Stanford
Si je me souviens bien, l'analyseur de Stanford est une bibliothèque java, donc vous devez avoir un interpréteur Java fonctionnant sur votre serveur / ordinateur.
Je l'ai utilisé une fois sur un serveur, combiné avec un script php. Le script a utilisé la fonction exec () de php pour faire un appel en ligne de commande à l'analyseur comme ceci:
Je ne me souviens pas de tous les détails de cette commande, elle a essentiellement ouvert le fileToParse, l'a analysé et écrit la sortie dans le resultFile. PHP ouvrirait alors le fichier de résultat pour une utilisation ultérieure.
La fin de la commande dirige l'analyseur détaillé vers NULL, pour éviter que des informations de ligne de commande inutiles ne perturbent le script.
Je ne sais pas grand-chose sur Python, mais il pourrait y avoir un moyen de faire des appels en ligne de commande.
Ce n'est peut-être pas l'itinéraire exact que vous espériez, mais j'espère que cela vous donnera de l'inspiration. Bonne chance.
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Voici une adaptation du code de danger98 qui fonctionne avec nltk3.0.0 sur windoze, et probablement les autres plates-formes également, ajustez les noms de répertoire en fonction de votre configuration:
import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER']='d:/stanford-parser'
os.environ['STANFORD_MODELS']='d:/stanford-parser'
os.environ['JAVAHOME']='c:/Program Files/java/jre7/bin'
parser = stanford.StanfordParser(model_path="d:/stanford-grammars/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.","What is your name?"))print sentences
Notez que la commande d'analyse a changé (voir le code source sur www.nltk.org/_modules/nltk/parse/stanford.html) et que vous devez définir la variable JAVAHOME. J'ai essayé de le faire lire le fichier de grammaire in situ dans le jar, mais je n'ai pas réussi jusqu'à présent à le faire.
Je suis de 1989 pas 98, mais merci pour votre exemple;)
danger89
4
Vous pouvez utiliser la sortie de Stanford Parsers pour créer une arborescence dans nltk (nltk.tree.Tree).
En supposant que l'analyseur de Stanford vous donne un fichier dans lequel il y a exactement un arbre d'analyse pour chaque phrase. Ensuite, cet exemple fonctionne, même s'il ne semble pas très pythonique:
f = open(sys.argv[1]+".output"+".30"+".stp","r")
parse_trees_text=[]
tree =""for line in f:if line.isspace():
parse_trees_text.append(tree)
tree =""elif"(. ...))"in line:#print "YES"
tree = tree+')'
parse_trees_text.append(tree)
tree =""else:
tree = tree + line
parse_trees=[]for t in parse_trees_text:
tree = nltk.Tree(t)
tree.__delitem__(len(tree)-1)#delete "(. .))" from tree (you don't need that)
s = traverse(tree)
parse_trees.append(tree)
+1 pour laisser java faire des trucs java et python faire des trucs python. En fonction de la manière dont vous appelez la commande java et des options, l'analyse du fichier de sortie à partir de l'analyseur stanford peut être différente. Ce serait bien si vous ajoutiez également des détails sur la façon dont vous avez appelé Stanford Parse pour obtenir votre fichier de sortie.
alvas
4
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Puisque personne ne l'a vraiment mentionné et que cela m'a beaucoup perturbé, voici une autre façon d'utiliser l'analyseur Stanford en python:
Je suis sur une machine Windows et vous pouvez simplement exécuter l'analyseur normalement comme vous le faites à partir de la commande, mais comme dans un répertoire différent afin que vous n'ayez pas besoin d'éditer le fichier lexparser.bat. Mettez simplement le chemin complet.
La partie la plus délicate pour moi était de comprendre comment exécuter un programme java à partir d'un chemin différent. Il doit y avoir un meilleur moyen, mais cela fonctionne.
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Une légère mise à jour (ou simplement une alternative) sur la réponse complète de danger89 sur l'utilisation de Stanford Parser dans NLTK et Python
Avec stanford-parser-full-2015-04-20, JRE 1.8 et nltk 3.0.4 (python 2.7.6), il semble que vous n'ayez plus besoin d'extraire le fichier englishPCFG.ser.gz de stanford-parser-xxx-models .jar ou configurer n'importe quel os.environ
from nltk.parse.stanford importStanfordParser
english_parser =StanfordParser('path/stanford-parser.jar','path/stanford-parser-3.5.2-models.jar')
s ="The real voyage of discovery consists not in seeking new landscapes, but in having new eyes."
sentences = english_parser.raw_parse_sents((s,))print sentences #only print <listiterator object> for this version#draw the treefor line in sentences:for sentence in line:
sentence.draw()
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Voici la version Windows de la réponse d'alvas
sentences =('. '.join(['this is sentence one without a period','this is another foo bar sentence '])+'.').encode('ascii',errors ='ignore')
catpath =r"YOUR CURRENT FILE PATH"
f = open('stanfordtemp.txt','w')
f.write(sentences)
f.close()
parse_out = os.popen(catpath+r"\nlp_tools\stanford-parser-2010-08-20\lexparser.bat "+catpath+r"\stanfordtemp.txt").readlines()
bracketed_parse =" ".join([i.strip()for i in parse_out if i.strip()if i.strip()[0]=="("])
bracketed_parse ="\n(ROOT".join(bracketed_parse.split(" (ROOT")).split('\n')
aa = map(lambda x :ParentedTree.fromstring(x),bracketed_parse)
REMARQUES:
Dans lexparser.bat vous devez changer tous les chemins en chemin absolu pour éviter les erreurs java telles que "classe non trouvée"
Je vous recommande fortement d'appliquer cette méthode sous Windows car j'ai essayé plusieurs réponses sur la page et toutes les méthodes de communication python avec Java échouent.
Je souhaite avoir de vos nouvelles si vous réussissez sur Windows et souhaitez que vous puissiez me dire comment vous surmontez tous ces problèmes.
rechercher dans le wrapper python stanford coreNLP pour obtenir la version python
J'ai mis de nombreuses heures et j'ai finalement trouvé une solution simple pour les utilisateurs de Windows. Fondamentalement, sa version résumée d'une réponse existante par alvas, mais facile à suivre (espérons-le) pour ceux qui sont nouveaux dans la PNL de Stanford et sont des utilisateurs de Windows.
3) Définissez les variables d'environnement (classpath et stanford_modules) à partir du dossier décompressé.
import os
os.environ['CLASSPATH']="C:/Users/Downloads/stanford-ner-2015-04-20/stanford-ner.jar"
os.environ['STANFORD_MODELS']="C:/Users/Downloads/stanford-ner-2015-04-20/classifiers/"
4) définissez les variables d'environnement pour JAVA, comme là où vous avez installé JAVA. pour moi c'était en dessous
6) appelez le modèle pré-entraîné qui est présent dans le dossier classifier dans le dossier décompressé. ajoutez ".gz" à la fin pour l'extension de fichier. pour moi, le modèle que je voulais utiliser étaitenglish.all.3class.distsim.crf.ser
st =StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
7) Maintenant, exécutez l'analyseur !! et nous avons terminé !!
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
Remarque: La réponse suivante ne fonctionnera que sur:
Version NLTK == 3.2.5
Stanford Tools compilé depuis le 2016-10-31
Python 2.7, 3.5 et 3.6
Comme les deux outils changent assez rapidement et que l'API peut sembler très différente 3 à 6 mois plus tard. Veuillez traiter la réponse suivante comme une solution temporelle et non éternelle.
>>>from nltk.tag.stanford importCoreNLPPOSTagger,CoreNLPNERTagger>>>from nltk.parse.corenlp importCoreNLPParser>>> stpos, stner =CoreNLPPOSTagger(),CoreNLPNERTagger()>>> stpos.tag('What is the airspeed of an unladen swallow ?'.split())[(u'What', u'WP'),(u'is', u'VBZ'),(u'the', u'DT'),(u'airspeed', u'NN'),(u'of', u'IN'),(u'an', u'DT'),(u'unladen', u'JJ'),(u'swallow', u'VB'),(u'?', u'.')]>>> stner.tag('Rami Eid is studying at Stony Brook University in NY'.split())[(u'Rami', u'PERSON'),(u'Eid', u'PERSON'),(u'is', u'O'),(u'studying', u'O'),(u'at', u'O'),(u'Stony', u'ORGANIZATION'),(u'Brook', u'ORGANIZATION'),(u'University', u'ORGANIZATION'),(u'in', u'O'),(u'NY', u'O')]>>> parser =CoreNLPParser(url='http://localhost:9000')>>> next(... parser.raw_parse('The quick brown fox jumps over the lazy dog.')...).pretty_print()# doctest: +NORMALIZE_WHITESPACE
ROOT
|
S
_______________|__________________________
| VP || _________|___ ||| PP ||| ________|___ |
NP || NP |
____|__________ || _______|____ |
DT JJ JJ NN VBZ IN DT JJ NN .||||||||||The quick brown fox jumps over the lazy dog .>>>(parse_fox,),(parse_wolf,)= parser.raw_parse_sents(...[...'The quick brown fox jumps over the lazy dog.',...'The quick grey wolf jumps over the lazy fox.',...]...)>>> parse_fox.pretty_print()# doctest: +NORMALIZE_WHITESPACE
ROOT
|
S
_______________|__________________________
| VP || _________|___ ||| PP ||| ________|___ |
NP || NP |
____|__________ || _______|____ |
DT JJ JJ NN VBZ IN DT JJ NN .||||||||||The quick brown fox jumps over the lazy dog .>>> parse_wolf.pretty_print()# doctest: +NORMALIZE_WHITESPACE
ROOT
|
S
_______________|__________________________
| VP || _________|___ ||| PP ||| ________|___ |
NP || NP |
____|_________ || _______|____ |
DT JJ JJ NN VBZ IN DT JJ NN .||||||||||The quick grey wolf jumps over the lazy fox .>>>(parse_dog,),(parse_friends,)= parser.parse_sents(...[..."I 'm a dog".split(),..."This is my friends ' cat ( the tabby )".split(),...]...)>>> parse_dog.pretty_print()# doctest: +NORMALIZE_WHITESPACE
ROOT
|
S
_______|____
| VP
| ________|___
NP | NP
|| ___|___
PRP VBP DT NN
||||
I 'm a dog
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Je ne peux pas laisser cela comme un commentaire à cause de la réputation, mais comme j'ai passé (perdu?) Un peu de temps à résoudre cela, je préférerais partager mon problème / solution pour que cet analyseur fonctionne en NLTK.
par exemple pour l'analyseur, il n'y aura pas de répertoire de modèle.
Cela m'a conduit à tort à:
pas faire attention à la valeur que je mets à STANFORD_MODELS (et ne se soucient de ma CLASSPATH)
laissez ../path/tostanford-parser-full-2015-2012-09/models directory* pratiquement vide * (ou avec un fichier jar dont le nom ne correspond pas à nltk regex)!
Si l'OP, comme moi, voulait juste utiliser l'analyseur, il peut être déroutant qu'en ne téléchargeant rien d'autre (pas de POStagger, pas de NER, ...) et en suivant toutes ces instructions, nous obtenons toujours une erreur.
Finalement, pour tout élément CLASSPATHdonné (exemples et explications suivants dans les réponses de ce fil), j'obtiendrais toujours l'erreur:
NLTK n'a pas pu trouver stanford-parser - (\ d +) (. (\ D +)) + - models.jar! Définissez la variable d'environnement CLASSPATH. Pour plus d'informations, sur stanford-parser - (\ d +) (. (\ D +)) + - models.jar,
NLTK n'a pas pu trouver stanford-parser.jar! Définissez la variable d'environnement CLASSPATH. Pour plus d'informations, sur stanford-parser.jar, voir: http://nlp.stanford.edu/software/lex-parser.shtml
Cependant , surtout, je pourrais charger et utiliser correctement l'analyseur si j'appelais la fonction avec tous les arguments et le chemin entièrement spécifiés, comme dans:
Par conséquent, l'erreur est venue de NLTKet comment il recherche les fichiers JAR en utilisant les variables d'environnement STANFORD_MODELSet fournies CLASSPATH. Pour résoudre ce problème, le *-models.jar, avec le formatage correct (pour correspondre à l'expression NLTKrégulière dans le code, donc pas de -corenlp -.... jar) doit être situé dans le dossier désigné parSTANFORD_MODELS .
Et enfin, en copiant stanford-parser-3.6.0-models.jar(ou la version correspondante), dans:
path/to/stanford-parser-full-2015-12-09/models/
Je pourrais arriver StanfordParserà charger en douceur en python avec le classique CLASSPATHqui pointe vers stanford-parser.jar. En fait, en tant que tel, vous pouvez appeler StanfordParsersans paramètres, la valeur par défaut fonctionnera simplement.
J'utilise la version 3.2.4 de nltk. Et le code suivant a fonctionné pour moi.
from nltk.internals import find_jars_within_path
from nltk.tag importStanfordPOSTaggerfrom nltk import word_tokenize
# Alternatively to setting the CLASSPATH add the jar and model via their
path:
jar ='/home/ubuntu/stanford-postagger-full-2017-06-09/stanford-postagger.jar'
model ='/home/ubuntu/stanford-postagger-full-2017-06-09/models/english-left3words-distsim.tagger'
pos_tagger =StanfordPOSTagger(model, jar)# Add other jars from Stanford directory
stanford_dir = pos_tagger._stanford_jar.rpartition('/')[0]
stanford_jars = find_jars_within_path(stanford_dir)
pos_tagger._stanford_jar =':'.join(stanford_jars)
text = pos_tagger.tag(word_tokenize("Open app and play movie"))print(text)
Un nouveau développement de l'analyseur de Stanford basé sur un modèle neuronal, formé à l'aide de Tensorflow, est très récemment mis à disposition pour être utilisé comme API python. Ce modèle est censé être beaucoup plus précis que le moel basé sur Java. Vous pouvez certainement intégrer un pipeline NLTK.
Lien vers l'analyseur. Le référentiel contient des modèles d'analyseurs pré-entraînés pour 53 langues.
Réponses:
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Bien sûr, essayez ce qui suit en Python:
Production:
Remarque 1: Dans cet exemple, l'analyseur et les fichiers JAR du modèle se trouvent dans le même dossier.
Note 2:
Remarque 3: Le fichier englishPCFG.ser.gz se trouve dans le fichier models.jar (/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz). Veuillez utiliser le gestionnaire d'archives come pour «décompresser» le fichier models.jar.
Remarque 4: assurez-vous que vous utilisez Java JRE (Runtime Environment) 1.8 également connu sous le nom d'Oracle JDK 8. Sinon, vous obtiendrez: Unsupported major.minor version 52.0.
Installation
Téléchargez NLTK v3 depuis: https://github.com/nltk/nltk . Et installez NLTK:
installation sudo python setup.py
Vous pouvez utiliser le téléchargeur NLTK pour obtenir Stanford Parser, en utilisant Python:
Essayez mon exemple! (n'oubliez pas de changer les chemins de jar et de changer le chemin du modèle à l'emplacement ser.gz)
OU:
Téléchargez et installez NLTK v3, comme ci-dessus.
Téléchargez la dernière version sur ( le nom de fichier de la version actuelle est stanford-parser-full-2015-01-29.zip): http://nlp.stanford.edu/software/lex-parser.shtml#Download
Extrayez le fichier standford-parser-full-20xx-xx-xx.zip.
Créez un nouveau dossier ('jars' dans mon exemple). Placez les fichiers extraits dans ce dossier jar: stanford-parser-3.xx-models.jar et stanford-parser.jar.
Comme indiqué ci-dessus, vous pouvez utiliser les variables d'environnement (STANFORD_PARSER & STANFORD_MODELS) pour pointer vers ce dossier 'jars'. J'utilise Linux, donc si vous utilisez Windows, veuillez utiliser quelque chose comme: C: // dossier // jars.
Ouvrez le fichier stanford-parser-3.xx-models.jar à l'aide d'un gestionnaire d'archives (7zip).
Naviguez dans le fichier jar; edu / stanford / nlp / models / lexparser. Encore une fois, extrayez le fichier appelé «englishPCFG.ser.gz». Souvenez-vous de l'emplacement où vous extrayez ce fichier ser.gz.
Lors de la création d'une instance StanfordParser, vous pouvez fournir le chemin du modèle en tant que paramètre. C'est le chemin complet vers le modèle, dans notre cas /location/of/englishPCFG.ser.gz.
Essayez mon exemple! (n'oubliez pas de changer les chemins de jar et de changer le chemin du modèle à l'emplacement ser.gz)
la source
nltk.parse.stanford
? Je n'ai quenltk.tag.stanford
dans NLTK2.0.4
.AttributeError: 'StanfordParser' object has no attribute 'raw_batch_parse'
raw_parse_sents()
for line in sentences: for sentence in line: sentence.draw()
vous ne pouvez exécuter draw () que sur un objet Tree;)NLTK official 3rd party tools
documentation.Réponse obsolète
La réponse ci-dessous est obsolète, veuillez utiliser la solution sur https://stackoverflow.com/a/51981566/610569 pour NLTK v3.3 et supérieur.
ÉDITÉ
Remarque: La réponse suivante ne fonctionnera que sur:
Comme les deux outils changent assez rapidement et que l'API peut sembler très différente 3 à 6 mois plus tard. Veuillez traiter la réponse suivante comme une solution temporelle et non éternelle.
Référez-vous toujours à https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software pour les dernières instructions sur la façon d'interfacer les outils de Stanford NLP en utilisant NLTK !!
TL; DR
Ensuite:
En long:
Tout d'abord , il faut noter que les outils de Stanford NLP sont écrits en Java et NLTK est écrit en Python . La façon dont NLTK interagit avec l'outil consiste à appeler l'outil Java via l'interface de ligne de commande.
Deuxièmement , l'
NLTK
API des outils PNL de Stanford a beaucoup changé depuis la version 3.1. Il est donc conseillé de mettre à jour votre package NLTK vers la v3.1.Troisièmement , l'
NLTK
API de Stanford NLP Tools s'enroule autour des outils PNL individuels, par exemple Stanford POS tagger , Stanford NER Tagger , Stanford Parser .Pour le tagger POS et NER, il N'enroule PAS le package PNL Stanford Core .
Pour le Stanford Parser, c'est un cas particulier où il englobe à la fois le Stanford Parser et le Stanford Core NLP (personnellement, je n'ai pas utilisé ce dernier en utilisant NLTK, je préférerais suivre la démonstration de @ dimazest sur http: //www.eecs. qmul.ac.uk/~dm303/stanford-dependency-parser-nltk-and-anaconda.html )
Notez qu'à partir de NLTK v3.1, les variables
STANFORD_JAR
etSTANFORD_PARSER
sont obsolètes et ne sont PLUS utiliséesEn plus:
ÉTAPE 1
En supposant que vous avez correctement installé Java sur votre système d'exploitation.
Maintenant, installez / mettez à jour votre version NLTK (voir http://www.nltk.org/install.html ):
sudo pip install -U nltk
sudo apt-get install python-nltk
Pour Windows (utilisez l'installation binaire 32 bits):
( Pourquoi pas 64 bits? Voir https://github.com/nltk/nltk/issues/1079 )
Puis par paranoïa, revérifiez votre
nltk
version à l'intérieur de python:Ou sur la ligne de commande:
Assurez-vous que vous voyez
3.1
comme la sortie.Pour encore plus de paranoïa, vérifiez que toutes vos API d'outils de PNL de Stanford préférées sont disponibles:
( Remarque : les importations ci-dessus garantiront UNIQUEMENT que vous utilisez une version NLTK correcte contenant ces API. Ne pas voir d'erreurs dans l'importation ne signifie pas que vous avez correctement configuré l'API NLTK pour utiliser les outils de Stanford)
ÉTAPE 2
Maintenant que vous avez vérifié que vous disposez de la version correcte de NLTK qui contient l'interface des outils Stanford NLP nécessaire. Vous devez télécharger et extraire tous les outils NLP Stanford nécessaires.
TL; DR , sous Unix:
Sous Windows / Mac:
ÉTAPE 3
Configurez les variables d'environnement de sorte que NLTK puisse trouver automatiquement le chemin du fichier approprié. Vous devez définir les variables suivantes:
Ajoutez le
.jar
fichier NLP Stanford approprié à laCLASSPATH
variable d'environnement.stanford-ner-2015-04-20/stanford-ner.jar
stanford-postagger-full-2015-04-20/stanford-postagger.jar
stanford-parser-full-2015-04-20/stanford-parser.jar
le fichier jar et le modèle de l'analyseur,stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
Ajoutez le répertoire de modèle approprié à la
STANFORD_MODELS
variable (c'est-à-dire le répertoire où vous pouvez trouver où les modèles pré-entraînés sont enregistrés)stanford-ner-2015-04-20/classifiers/
stanford-postagger-full-2015-04-20/models/
Dans le code, voyez qu'il recherche le
STANFORD_MODELS
répertoire avant d'ajouter le nom du modèle. Voir aussi que, l'API essaie également automatiquement de rechercher dans les environnements OS pour le `CLASSPATH )Notez qu'à partir de NLTK v3.1, les
STANFORD_JAR
variables sont obsolètes et ne sont PLUS utilisées . Les extraits de code trouvés dans les questions Stackoverflow suivantes peuvent ne pas fonctionner:TL; DR pour STEP 3 sur Ubuntu
( Pour Windows : voir https://stackoverflow.com/a/17176423/610569 pour obtenir des instructions sur la définition des variables d'environnement)
Vous DEVEZ définir les variables comme ci-dessus avant de démarrer python, puis:
Vous pouvez également essayer d'ajouter les variables d'environnement à l'intérieur de python, comme l'ont suggéré les réponses précédentes, mais vous pouvez également dire directement à l'analyseur / tagueur de s'initialiser sur le chemin direct où vous avez conservé le
.jar
fichier et vos modèles.Il n'est PAS nécessaire de définir les variables d'environnement si vous utilisez la méthode suivante MAIS lorsque l'API change ses noms de paramètres, vous devrez changer en conséquence. C'est pourquoi il est PLUS conseillé de définir les variables d'environnement que de modifier votre code python pour l'adapter à la version NLTK.
Par exemple ( sans définir de variables d'environnement ):
la source
Réponse obsolète
La réponse ci-dessous est obsolète, veuillez utiliser la solution sur https://stackoverflow.com/a/51981566/610569 pour NLTK v3.3 et supérieur.
Édité
À partir de l'analyseur de Stanford actuel (20/04/2015), la sortie par défaut pour le
lexparser.sh
a changé et le script ci-dessous ne fonctionnera pas.Mais cette réponse est conservée pour l'héritage, elle fonctionnera toujours avec http://nlp.stanford.edu/software/stanford-parser-2012-11-12.zip .
Réponse originale
Je vous suggère de ne pas jouer avec Jython, JPype. Laisser python faire des trucs python et laisser java faire des trucs java, obtenir la sortie de Stanford Parser via la console.
Après avoir installé le Stanford Parser dans votre répertoire personnel
~/
, utilisez simplement cette recette python pour obtenir l'analyse entre crochets plats:la source
len(i.strip()) > 0
sinon j'ai eu une erreur d'index. Je suppose que la sortie de mon analyseur avait au moins une ligne qui était purement un espace blanc.'
s, vous obtiendrez des erreurs étranges. Il existe de meilleures façons d'appeler les choses sur la ligne de commandeÀ partir de NLTK v3.3, les utilisateurs doivent éviter les marqueurs Stanford NER ou POS
nltk.tag
et éviter le tokenizer / segmenter Stanfordnltk.tokenize
.Utilisez plutôt la nouvelle
nltk.parse.corenlp.CoreNLPParser
API.Veuillez consulter https://github.com/nltk/nltk/wiki/Stanford-CoreNLP-API-in-NLTK
(En évitant la réponse aux liens uniquement, j'ai collé les documents du wiki NLTK github ci-dessous)
Tout d'abord, mettez à jour votre NLTK
Ensuite, téléchargez les packages CoreNLP nécessaires:
Anglais
Toujours dans le
stanford-corenlp-full-2018-02-27
répertoire, démarrez le serveur:Puis en Python:
chinois
Démarrez le serveur un peu différemment, toujours à partir du répertoire `stanford-corenlp-full-2018-02-27:
En Python:
arabe
Démarrez le serveur:
En Python:
français
Démarrez le serveur:
En Python:
allemand
Démarrez le serveur:
En Python:
Espagnol
Démarrez le serveur:
En Python:
la source
list(parser.raw_parse(text))
oulist(parser.parse(parser.tokenize(text))
. Correction de l'exemple;)Il existe une interface python pour l'analyseur de Stanford
http://projects.csail.mit.edu/spatial/Stanford_Parser
la source
La page du logiciel Stanford Core NLP contient une liste de wrappers python:
http://nlp.stanford.edu/software/corenlp.shtml#Extensions
la source
Si je me souviens bien, l'analyseur de Stanford est une bibliothèque java, donc vous devez avoir un interpréteur Java fonctionnant sur votre serveur / ordinateur.
Je l'ai utilisé une fois sur un serveur, combiné avec un script php. Le script a utilisé la fonction exec () de php pour faire un appel en ligne de commande à l'analyseur comme ceci:
Je ne me souviens pas de tous les détails de cette commande, elle a essentiellement ouvert le fileToParse, l'a analysé et écrit la sortie dans le resultFile. PHP ouvrirait alors le fichier de résultat pour une utilisation ultérieure.
La fin de la commande dirige l'analyseur détaillé vers NULL, pour éviter que des informations de ligne de commande inutiles ne perturbent le script.
Je ne sais pas grand-chose sur Python, mais il pourrait y avoir un moyen de faire des appels en ligne de commande.
Ce n'est peut-être pas l'itinéraire exact que vous espériez, mais j'espère que cela vous donnera de l'inspiration. Bonne chance.
la source
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Voici une adaptation du code de danger98 qui fonctionne avec nltk3.0.0 sur windoze, et probablement les autres plates-formes également, ajustez les noms de répertoire en fonction de votre configuration:
Notez que la commande d'analyse a changé (voir le code source sur www.nltk.org/_modules/nltk/parse/stanford.html) et que vous devez définir la variable JAVAHOME. J'ai essayé de le faire lire le fichier de grammaire in situ dans le jar, mais je n'ai pas réussi jusqu'à présent à le faire.
la source
Vous pouvez utiliser la sortie de Stanford Parsers pour créer une arborescence dans nltk (nltk.tree.Tree).
En supposant que l'analyseur de Stanford vous donne un fichier dans lequel il y a exactement un arbre d'analyse pour chaque phrase. Ensuite, cet exemple fonctionne, même s'il ne semble pas très pythonique:
la source
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Puisque personne ne l'a vraiment mentionné et que cela m'a beaucoup perturbé, voici une autre façon d'utiliser l'analyseur Stanford en python:
de cette façon, vous n'avez plus à vous soucier du chemin.
Pour ceux qui ne peuvent pas l'utiliser correctement sur Ubuntu ou exécuter le code dans Eclipse.
la source
Je suis sur une machine Windows et vous pouvez simplement exécuter l'analyseur normalement comme vous le faites à partir de la commande, mais comme dans un répertoire différent afin que vous n'ayez pas besoin d'éditer le fichier lexparser.bat. Mettez simplement le chemin complet.
La partie la plus délicate pour moi était de comprendre comment exécuter un programme java à partir d'un chemin différent. Il doit y avoir un meilleur moyen, mais cela fonctionne.
la source
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Une légère mise à jour (ou simplement une alternative) sur la réponse complète de danger89 sur l'utilisation de Stanford Parser dans NLTK et Python
Avec stanford-parser-full-2015-04-20, JRE 1.8 et nltk 3.0.4 (python 2.7.6), il semble que vous n'ayez plus besoin d'extraire le fichier englishPCFG.ser.gz de stanford-parser-xxx-models .jar ou configurer n'importe quel os.environ
la source
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Voici la version Windows de la réponse d'alvas
REMARQUES:
Dans
lexparser.bat
vous devez changer tous les chemins en chemin absolu pour éviter les erreurs java telles que "classe non trouvée"Je vous recommande fortement d'appliquer cette méthode sous Windows car j'ai essayé plusieurs réponses sur la page et toutes les méthodes de communication python avec Java échouent.
Je souhaite avoir de vos nouvelles si vous réussissez sur Windows et souhaitez que vous puissiez me dire comment vous surmontez tous ces problèmes.
rechercher dans le wrapper python stanford coreNLP pour obtenir la version python
la source
J'ai mis de nombreuses heures et j'ai finalement trouvé une solution simple pour les utilisateurs de Windows. Fondamentalement, sa version résumée d'une réponse existante par alvas, mais facile à suivre (espérons-le) pour ceux qui sont nouveaux dans la PNL de Stanford et sont des utilisateurs de Windows.
1) Téléchargez le module que vous souhaitez utiliser, tel que NER, POS etc. Dans mon cas, je voulais utiliser NER, j'ai donc téléchargé le module à partir de http://nlp.stanford.edu/software/stanford-ner-2015- 04-20.zip
2) Décompressez le fichier.
3) Définissez les variables d'environnement (classpath et stanford_modules) à partir du dossier décompressé.
4) définissez les variables d'environnement pour JAVA, comme là où vous avez installé JAVA. pour moi c'était en dessous
5) importez le module de votre choix
6) appelez le modèle pré-entraîné qui est présent dans le dossier classifier dans le dossier décompressé. ajoutez ".gz" à la fin pour l'extension de fichier. pour moi, le modèle que je voulais utiliser était
english.all.3class.distsim.crf.ser
7) Maintenant, exécutez l'analyseur !! et nous avons terminé !!
la source
Réponse obsolète
La réponse ci-dessous est obsolète, veuillez utiliser la solution sur https://stackoverflow.com/a/51981566/610569 pour NLTK v3.3 et supérieur.
ÉDITÉ
Remarque: La réponse suivante ne fonctionnera que sur:
Comme les deux outils changent assez rapidement et que l'API peut sembler très différente 3 à 6 mois plus tard. Veuillez traiter la réponse suivante comme une solution temporelle et non éternelle.
Référez-vous toujours à https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software pour les dernières instructions sur la façon d'interfacer les outils de Stanford NLP en utilisant NLTK !!
TL; DR
Le code suivant provient de https://github.com/nltk/nltk/pull/1735#issuecomment-306091826
Dans le terminal:
En Python:
Veuillez consulter http://www.nltk.org/_modules/nltk/parse/corenlp.html pour plus d'informations sur l'API de Stanford. Jetez un œil aux docstrings!
la source
Notez que cette réponse s'applique à NLTK v 3.0 et non aux versions plus récentes.
Je ne peux pas laisser cela comme un commentaire à cause de la réputation, mais comme j'ai passé (perdu?) Un peu de temps à résoudre cela, je préférerais partager mon problème / solution pour que cet analyseur fonctionne en NLTK.
Dans l' excellente réponse d'alvas , il est mentionné que:
Cela m'a conduit à tort à:
STANFORD_MODELS
(et ne se soucient de maCLASSPATH
)../path/tostanford-parser-full-2015-2012-09/models directory
* pratiquement vide * (ou avec un fichier jar dont le nom ne correspond pas à nltk regex)!Si l'OP, comme moi, voulait juste utiliser l'analyseur, il peut être déroutant qu'en ne téléchargeant rien d'autre (pas de POStagger, pas de NER, ...) et en suivant toutes ces instructions, nous obtenons toujours une erreur.
Finalement, pour tout élément
CLASSPATH
donné (exemples et explications suivants dans les réponses de ce fil), j'obtiendrais toujours l'erreur:voir: http://nlp.stanford.edu/software/lex-parser.shtml
OU:
Cependant , surtout, je pourrais charger et utiliser correctement l'analyseur si j'appelais la fonction avec tous les arguments et le chemin entièrement spécifiés, comme dans:
Solution pour l'analyseur seul:
Par conséquent, l'erreur est venue de
NLTK
et comment il recherche les fichiers JAR en utilisant les variables d'environnementSTANFORD_MODELS
et fourniesCLASSPATH
. Pour résoudre ce problème, le*-models.jar
, avec le formatage correct (pour correspondre à l'expressionNLTK
régulière dans le code, donc pas de -corenlp -.... jar) doit être situé dans le dossier désigné parSTANFORD_MODELS
.A savoir, j'ai d'abord créé:
Puis ajouté dans
.bashrc
:Et enfin, en copiant
stanford-parser-3.6.0-models.jar
(ou la version correspondante), dans:Je pourrais arriver
StanfordParser
à charger en douceur en python avec le classiqueCLASSPATH
qui pointe versstanford-parser.jar
. En fait, en tant que tel, vous pouvez appelerStanfordParser
sans paramètres, la valeur par défaut fonctionnera simplement.la source
J'utilise la version 3.2.4 de nltk. Et le code suivant a fonctionné pour moi.
Production:
la source
Un nouveau développement de l'analyseur de Stanford basé sur un modèle neuronal, formé à l'aide de Tensorflow, est très récemment mis à disposition pour être utilisé comme API python. Ce modèle est censé être beaucoup plus précis que le moel basé sur Java. Vous pouvez certainement intégrer un pipeline NLTK.
Lien vers l'analyseur. Le référentiel contient des modèles d'analyseurs pré-entraînés pour 53 langues.
la source